Есть несколько вещей, которые я не совсем понимаю, когда речь заходит о планировании:процесс и накладные планирования потоков
- Я предполагаю, что каждый процесс/нить, пока она ЦП, дается время окно. После того, как окно окончено, оно обменивается, и выполняется другой процесс/поток. Правильно ли это предположение? Есть ли какие-либо балльные парки, как долго это окно находится на современном ПК? Я предполагаю около 100 мс? Каковы накладные расходы на замену? Несколько миллисекунд или около того?
- Расписано ли ОС по процессам или отдельному потоку ядра? Было бы разумнее планировать каждый процесс, и в течение этого времени запустите все потоки, которые будут доступны. Таким образом, переключение контекста процесса минимизируется. Правильно ли я понимаю?
- Как проходит время каждого потока по сравнению с другими системными временами, такими как доступ к ОЗУ, доступ к сети, HD I/O и т. Д.?
- Если я читаю сокет (блокирующий), мой поток будет заменен до тех пор, пока данные не будут доступны, тогда будет запущено аппаратное прерывание, и данные будут перемещены в ОЗУ (либо ЦП, либо сетевым адаптером, если это поддерживает DMA). Правильно ли я предполагаю, что поток не обязательно будет заменен обратно в этой точке для обработки входящих данных?
Я спрашиваю прежде всего о Linux, но я бы предположил, что информация также применима и к Windows.
Я понимаю, что это куча разных вопросов, я пытаюсь прояснить свое понимание по этой теме.
Частота диспетчеризации задана во время компиляции ядра, поэтому она может варьироваться от системы к системе. Подкачка контролируется с помощью параметра «swappiness», опять же это также меняется. Не полный ответ, но я надеюсь, что это поможет :) – SteJ
Это действительно помогает. По крайней мере, я знаю, что делать в Google :-). Благодарю. – ventsyv