Относительно пользовательских потоков, запрашивающих ввод / вывод с библиотекой pthreads
Предположим, что поддержка потоков на уровне ядра отсутствует. Процесс имеет 10 запущенных потоков, и один из них запрашивает ввод / вывод.
Объявляет ли библиотека phread запрос ввода-вывода ядру сразу или начинает выполнять потоки в своей очереди готовности?
(Если он объявляет, что это запрос ввода-вывода, он будет вытеснен из ЦП, что делает многопоточность бесполезной для интенсивных задач ввода-вывода).
1 ответ
Во-первых, я думаю, что хотя "работают" 10 потоков, фактически каждый раз активен только один из них. И переключение контекста происходит для того, чтобы создать эту параллельную иллюзию.
Поэтому только действующий поток может выдать запрос ввода-вывода ядру. Если это блокирует ввод / вывод, да, вся система ожидает ответа ввода / вывода. Если это неблокирующий ввод / вывод, ядро переключится на следующий готовый поток и продолжит выполнение. Только после завершения ввода / вывода генерируется прерывание, информирующее ядро о том, что предыдущий поток может быть снова возвращен в очередь готовности.
Но интенсивная задача ввода-вывода действительно медленная.