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

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

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

Спасибо.

решение1

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

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

решение2

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

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

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

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


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

Первая работа проверяет приказы руководителей, в которых указано:

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

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

Рабочий 2 делает то же самое: он устанавливает таймер и получает то, что находится в верхней части списка TODO. Поскольку рабочий 1 удалил из него задачу A, рабочий 2 теперь начинает задачу B.

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

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

И т.д. и т.п.

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

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

решение3

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

Связанный контент