Относительно пользовательских потоков, запрашивающих ввод / вывод с библиотекой pthreads

Предположим, что поддержка потоков на уровне ядра отсутствует. Процесс имеет 10 запущенных потоков, и один из них запрашивает ввод / вывод.

Объявляет ли библиотека phread запрос ввода-вывода ядру сразу или начинает выполнять потоки в своей очереди готовности?

(Если он объявляет, что это запрос ввода-вывода, он будет вытеснен из ЦП, что делает многопоточность бесполезной для интенсивных задач ввода-вывода).

1 ответ

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

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

Но интенсивная задача ввода-вывода действительно медленная.

Другие вопросы по тегам