Здравствуйте, Sharov, Вы писали:
_>>Забавная статья. В ней всё абсолютно правильно, кроме первого абзаца (ты видимо только его и прочитал?), в котором автор радостно заявляет, что никаких ждущих потоков нет, и потом явно показывает их наличие в статье.
S>Подождите, автор говорил про iocp потоки пула, как результат работы io на самом верху (механизм передачи результата).
И? Какая разница, если в наше приложение данные придут не через фиксированное время после попадания их в оперативную память, а через некоторое неопределённое, когда там освободятся все нужные очереди, планировщики и т.п.? В этом смысле даже обычный синхронный api будет эффективнее.
Вообще в этой области есть три классических подхода:
1. блокировка (до выполнения задачи)
2. опрос (о статусе выполнения задачи)
3. асинхронный вызов (коллбэк)
Так вот асинхронный ввод-вывод в винде иногда по незнанию позиционируют как третий вариант, но на самом деле там чисто второй, только слегка закумуфлированный. В линухе тоже самое (epoll), но они хотя бы честно говорят об этом, а не пытаются создать видимость настоящей асинхронности. Хотя в теории могли бы, т.к. в самой ОС присутствует механизм для подобных вызовов в пользовательском пространстве (сигналы), но для ввода-вывода он не используется. А вот реально асинхронный ввод-вывод сейчас можно пощупать руками наверное только при программирование МК (ну или написания своей ОС, но этим уже немногие занимаются).
S>А кто сказал, что эти потоки ждут? Сам факт нахождения их в пуле говорит об обратном -- это всего лишь способ
S>диспетчеризации результата io в приложение. Т.е. iocp поток это не самый обычный поток, скажем так.
Ты похоже невнимательно прочитал документацию по IOCP. )