Clojure core.async и c10k

Насколько мне известно, асинхронные приложения с пулом потоков используются для того, чтобы не создавать новый поток для каждого соединения. Когда это решается с помощью блоков go в core.async, где сокет IO может быть припаркован, как это возможно с операционной системой и популярными http-библиотеками, поддерживающими его, другие блоки, такие как запросы к БД, необходимо обрабатывать с созданием нового thread. Для типичного веб-приложения 99,9% запросов обрабатываются с доступом к БД, и мы получаем n соединений = n потоков. Прав ли я и есть ли решение?


person fevgenym    schedule 23.04.2018    source источник


Ответы (1)


Да, вы не должны использовать блоки go для блокировки таких операций, как IO. Надеюсь, скоро у нас появится асинхронный jdbc https://www.slideshare.net/ypoirier/jdbc-next-a-new-asynchronous-api-for-connecting-to-a-database

Также есть https://github.com/alaisi/postgres.async

person fmnoise    schedule 23.04.2018
comment
Разве обычно не существует пул потоков, который поддерживает соединения с БД? Надежда/дизайн заключается в том, что каждая отдельная операция БД будет достаточно быстрой, чтобы 10 тыс. клиентов можно было мультиплексировать, скажем, по 100 соединениям (добавляя, конечно, некоторую задержку). - person orestis; 29.04.2018