2015-07-31 5 views
0

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

  1. Я предполагаю, что каждый процесс/нить, пока она ЦП, дается время окно. После того, как окно окончено, оно обменивается, и выполняется другой процесс/поток. Правильно ли это предположение? Есть ли какие-либо балльные парки, как долго это окно находится на современном ПК? Я предполагаю около 100 мс? Каковы накладные расходы на замену? Несколько миллисекунд или около того?
  2. Расписано ли ОС по процессам или отдельному потоку ядра? Было бы разумнее планировать каждый процесс, и в течение этого времени запустите все потоки, которые будут доступны. Таким образом, переключение контекста процесса минимизируется. Правильно ли я понимаю?
  3. Как проходит время каждого потока по сравнению с другими системными временами, такими как доступ к ОЗУ, доступ к сети, HD I/O и т. Д.?
  4. Если я читаю сокет (блокирующий), мой поток будет заменен до тех пор, пока данные не будут доступны, тогда будет запущено аппаратное прерывание, и данные будут перемещены в ОЗУ (либо ЦП, либо сетевым адаптером, если это поддерживает DMA). Правильно ли я предполагаю, что поток не обязательно будет заменен обратно в этой точке для обработки входящих данных?

Я спрашиваю прежде всего о Linux, но я бы предположил, что информация также применима и к Windows.

Я понимаю, что это куча разных вопросов, я пытаюсь прояснить свое понимание по этой теме.

+0

Частота диспетчеризации задана во время компиляции ядра, поэтому она может варьироваться от системы к системе. Подкачка контролируется с помощью параметра «swappiness», опять же это также меняется. Не полный ответ, но я надеюсь, что это поможет :) – SteJ

+0

Это действительно помогает. По крайней мере, я знаю, что делать в Google :-). Благодарю. – ventsyv

ответ

3

Я предполагаю, что каждый процесс/поток, если он связан с ЦП, получает временное окно. После того, как окно окончено, оно обменивается, и выполняется другой процесс/поток. Правильно ли это предположение? Есть ли какие-либо балльные парки, как долго это окно находится на современном ПК? Я предполагаю около 100 мс? Каковы накладные расходы на замену? Несколько миллисекунд или около того?

Нет. Практически все современные операционные системы используют превенцию, позволяя интерактивным процессам, которые внезапно должны работать (потому что пользователь нажал клавишу, данные были прочитаны с диска или получен сетевой пакет) для прерывания задач, связанных с ЦП.

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

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

Как проходит время каждого потока по сравнению с другими системными временами, такими как доступ к ОЗУ, доступ к сети, HD I/O и т. Д.?

Очевидно, что потоки должны проходить через очень большое количество обращений к ОЗУ, поскольку для переключения потоков требуется большое количество таких доступов. Жесткий диск и сетевой ввод-вывод, как правило, достаточно медленны, и поток, ожидающий такой вещи, запускается.

Быстрые SSD меняют вещи немного. В последнее время я вижу много долгосрочных оптимизаций, которые используют множество процессоров для предотвращения доступа к дискам, может быть хуже, чем просто делать доступ к диску на некоторых современных машинах!

+0

Мне тоже было интересно, что некоторые потоки будут тяжелыми CPU, а другие - IO heavy, а также смешивают CPU/IO и позволяют планировщику определить правильный микс. – ventsyv

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