в отношении пользовательских потоков, запрашивающих ввод / вывод с помощью библиотеки pthreads - PullRequest
0 голосов
/ 28 июля 2011

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

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

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

1 Ответ

0 голосов
/ 06 апреля 2012

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...