Поскольку каждое ядро ​​ЦП может обрабатывать один или два потока одновременно, насколько стабильна ОС, даже если запущено несколько потоков?

515
Ayman_Hilal

Чтобы объяснить больше, предположим, что у нас есть двухъядерный ЦП без гиперпоточности, это означает, что он может обрабатывать только 2 потока одновременно, ну, теперь предположим, что у нас есть сетевое приложение, которое запускает два фоновых сетевых потока, каждый из которых ожидает входящих соединений обрабатывать, поэтому эти потоки должны работать все время, теперь, почему процессы и потоки другой ОС все еще работают ?! как мне кажется, они не могут быть обработаны, потому что два потока полностью истощают процессорный процессор, потому что они ждут сетевых подключений и, следовательно, они должны быть готовы каждую наносекунду для соединений ... Как это происходит и работает? Как процессор может обрабатывать много и много потоков одновременно без какого-либо заметного зависания ?! (Я знаю, иногда окна становятся медленными и сумасшедшими, если одновременно запускается много тяжелых программ,

Благодарю.

0
Потому что ОС обрабатывает планирование Ramhound 9 лет назад 1

3 ответа на вопрос

5
Paul A. Clayton

Ответ относительно прост: когда поток ожидает события ввода-вывода, он возвращает оставшуюся часть своего времени ОС, которая затем может запланировать другой поток. По завершении ввода-вывода с высокой задержкой поток помечается как готовый к выполнению.

Это в значительной степени возможно, потому что большинство операций ввода-вывода управляется прерываниями, а не многократной проверкой, чтобы увидеть, завершился ли запрос ввода-вывода (известный как опрос).

Поток может быть либо ожидающим, либо работающим, но не оба одновременно. David Schwartz 7 лет назад 0
@DavidSchwartz При синхронном вводе-выводе вместо того, чтобы писать «ожидает события ввода-вывода», он выдает «я мог бы точнее записать», запрашивает следующие данные ввода-вывода и позволяет ОС планировать поток до тех пор, пока не будет получено больше данных. имеется в наличии". Даже с асинхронным вводом / выводом поток все еще будет ожидать ввода / вывода, но все равно будет работать во время ожидания (как пользователь, ожидающий электронную почту при использовании компьютера). (Функция обратного вызова позволила бы потоку обрабатывать новые данные как можно скорее, или можно было бы использовать грубый опрос, проверяя новые данные после завершения рабочего блока.) Paul A. Clayton 7 лет назад 0
При традиционном опросе оба потока ожидают (не обязательно выполняя какую-либо полезную работу (похожую на спин-блокировку), хотя цикл опроса может включать полезную работу (не то, чтобы цикл блокировки ожидания не был холодным)). В случае событий, управляемых аппаратным обеспечением (например, MONITOR / MWAIT в x86), поток может работать (с точки зрения ОС) и ожидать (с точки зрения аппаратного обеспечения). При грубой аппаратной многопоточности чтение регистра ввода / вывода (которое традиционно не разрешается кэшировать) может привести к тому, что аппаратный планировщик будет переключать потоки, хотя с точки зрения ОС он все еще работает. Paul A. Clayton 7 лет назад 0
2
Hennes

Если вы используете совместную многозадачность и у вас плохая программа: тогда да, вы правы.

Однако в реальном мире должно произойти следующее:

  1. Совместная многозадачность: я не продолжаю использовать процессор вечно. Вместо этого он либо даст другой программе шанс через некоторое время, либо когда он заблокирован.
    Ответ Павла описывает последнее.

  2. Упреждающая многозадачность (используется практически везде): ОС (не программа) на короткое время отдает ЦП программе, а затем отнимает ее. Это может быть так же просто, как запуск таймера, и когда истечет время, остановите процесс и передайте его следующему шагу / программе, которая ожидает.


В вашем случае подумайте об этом как о офисе с двумя работниками и тремя (или более) задачами. (Позволяет называть их задача-A, задача-B и задача-C).

Первая сработала проверяет приказы супервизоров, в которых говорится:

  • Установите таймер на 10 минут. Когда это закончится, перестаньте работать над текущей задачей, поместите ее в конец списка TODO и продолжайте читать этот документ.
  • Затем удалите первый элемент из верхней части списка TODO и начните работать над ним.
  • Повторение.

Работник 1 устанавливает таймер и получает первое задание из списка TODO (в данном случае это задание A).

Работник 2 делает то же самое: он устанавливает таймер и получает то, что сейчас находится сверху списка TODO. Так как рабочий 1 удалил задачу-А из нее, рабочий 2 теперь начинает выполнение задачи-Б.

Десять минут спустя таймер отключается. Работник 1 прекращает работу над заданием A и получает инструкции супервизора. В них указано, что текущая задача находится внизу списка TODO. Продолжая инструкции супервизора, он теперь перезапускает таймер и начинает работать с тем, что сейчас находится наверху списка TODO (который является задачей C).

Работник 2 делает то же самое, останавливает задачу B и начинает с верхней части списка TODO (в данном примере это задача A).

И т. Д.

Это несколько упрощено. Но это должно дать вам представление о том, как два шага (рабочие) могут работать 100% времени в трех или более задачах.

В реальных планировщиках есть еще много вещей. Например, прерывания (сравните это с звонком телефона в середине задачи и как с этим справиться), умное планирование (передача одной и той же задачи одному и тому же работнику, вероятно, приведет к тому, что она будет выполнена быстрее, так как работник уже знаком с ней), I / O (если работнику нужна книга из библиотеки (библиотек), он не будет ждать, пока не истечет таймер, но сразу же продолжит выполнение следующей задачи и т. Д. И т. Д.

0
Jamie Hanrahan

ОС остается стабильной практически так же, как она остается стабильной, когда на разных процессорах работают несколько потоков. Снаружи ядра ЦП наблюдается очень небольшая очевидная разница в поведении между двумя LP в одном ядре и одним LP в каждом из двух разных ядер. В обоих случаях должны использоваться все те же «безопасные для многих процессоров» методы программирования, такие как семафоры.