Я понимаю, что любой из этих потоков может быть запланирован первым.Но что на самом деле идет внутри процессора?Я читал в книге, что каждый из этих потоков получает некоторое время процессора, а потоки переключаются по порядку, чтобы создать иллюзию параллельной работы.Сколько времени у потока до того, как ЦП передается другим потокам?
Большинство современных ЦП могут одновременно запускать более одного потока.Если ЦП фактически не может запустить столько потоков параллельно, сколько потоков, которые хотят работать, планировщик примет решение о том, как долго запускать каждый поток.Как правило, он выбирает время, которое достаточно короткое, чтобы позволить работе чувствовать себя плавно, но не переключаться так часто, что снижение затрат на переключение потоков существенно влияет на производительность.
Кроме того, предположим, что t1 запланировано первым, значитон получает процессорное время, затем переходит в спящий режим на 1000 мс, как в приведенном выше коде.
Когда поток переходит в спящий режим, он больше не готов к работе.
Теперь предположим, что t2 получает процессорное время, и, поскольку он не спит, он печатает «Привет».Теперь t3 получает время процессора, оно спит 3000 мс, поэтому t1 снова получает время процессора.Итак, теперь t1 поднимается с того места, где он ушел раньше?Что если t1 все еще спит, потому что 1000 мс не прошло с прошлого раза?
Если поток все еще спит, он не готов к работе и поэтому не может быть запланирован.Поток спит, готовясь к тому, чтобы быть готовым к работе в какое-то время, а затем настраивая себя не готовым к работе.Только потоки, которые готовы к работе, могут быть запланированы.Исключение может применяться, если спящий режим находится в течение очень короткого промежутка времени.
Планировщик организует планирование потоков, которые готовы к работе, планирование потоков, которые больше не готовы к работе, и переключениеесли поток занимает процессор слишком долго, чтобы дать возможность другим потокам работать.Существуют механизмы, позволяющие потокам ожидать чего-либо (например, дисковый ввод-вывод, сетевой ввод-вывод, тайм-ауты, другие потоки, чтобы дать им работу, и т. Д.) Путем организации готовности к работе, когда что-то происходит.