2014-10-04 3 views
1

Вопрос: В чем преимущество и/или возможные недостатки планирования всех потоков процесса вместе на нескольких процессорах за один раз по сравнению с потоками планирования (из разных процессов) по одному за раз как становятся доступными отдельные процессоры?Понимание базовой концепции многопоточности

Обновить Примечание: Рассмотрите многопроцессор и процесс с двумя потоками. Предположим, что за один раз выполняется только один поток. Поток, запущенный с запуском, отправляет сообщение во второй поток, а затем блокирует ожидание ответа (и, следовательно, снимается с CPU). Через некоторое время второй поток получает запланированное сообщение, получает сообщение из первого потока, отправляет ответ, а затем блокирует ожидание нового сообщения из первого потока. Через некоторое время первый поток получает запланированный, обрабатывает ответ, отправляет новое сообщение, а затем блокируется, ожидая нового ответа и так далее. Все эти переключения можно избежать, если оба потока работают одновременно.

ответ

1

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

1

В общем, планирование всех потоков процесса вместе на нескольких процессорах одновременно приводит к отмене процессоров. Что вы будете делать, если, скажем, 8-ядерный процессор имеет два ядра с двумя потоками в процессе X, а другой процесс Y имеет семь потоков? Отказаться от запуска Y вообще?

Набор готовых потоков изменяется при возникновении аппаратных прерываний, а выполняемые потоки выполняют системные вызовы. Это необоснованная сдержанность, чтобы заставить алгоритм планирования принять «все готовые потоки в политике процесса или ни одной».

Смежные вопросы