Несколько удовлетворительный ответ:
Сердцем нового менеджера ввода-вывода GHC является цикл событий kqueue()/epoll(). Поэтому я ожидаю, что все, что может быть построено поверх этого, будет иметь право - если не сейчас, то позже. В частности, это означает:
- Файловый ввод-вывод
- Сетевой ввод-вывод
Код (я просматривал его несколько месяцев назад, возможно, что-то изменилось) также содержит поддержку регистрации и запуска разного рода тайм-аутов через приоритетную (поисковую) очередь. Это говорит о том, что большинство sleep-подобных вызовов также могут быть связаны с интерфейсом.
О доступе к базе данных: конечно, вы часто получаете доступ к базе данных через сетевой сокет ввода-вывода, поэтому вызов forkIO и выполнение доступа к БД в отдельном потоке должны быть выполнимыми, быстрыми и безопасными. Обмен данными с остальной частью приложения может осуществляться с помощью одного из средств параллелизма, Chan или STM.TChan.
Я не думаю, что есть виды операций ввода-вывода, в которых менеджер должен прибегать к блокировке как таковой, но я могу представить, что некоторые библиотеки могут обойти новый диспетчер ввода-вывода и пойти прямо к яремной вене. Заблокируют, конечно.
person
I GIVE CRAP ANSWERS
schedule
15.12.2010