Насколько мне известно, асинхронные приложения с пулом потоков используются для того, чтобы не создавать новый поток для каждого соединения. Когда это решается с помощью блоков go
в core.async, где сокет IO может быть припаркован, как это возможно с операционной системой и популярными http-библиотеками, поддерживающими его, другие блоки, такие как запросы к БД, необходимо обрабатывать с созданием нового thread
. Для типичного веб-приложения 99,9% запросов обрабатываются с доступом к БД, и мы получаем n соединений = n потоков. Прав ли я и есть ли решение?
Clojure core.async и c10k
Ответы (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
Разве обычно не существует пул потоков, который поддерживает соединения с БД? Надежда/дизайн заключается в том, что каждая отдельная операция БД будет достаточно быстрой, чтобы 10 тыс. клиентов можно было мультиплексировать, скажем, по 100 соединениям (добавляя, конечно, некоторую задержку).
- person orestis; 29.04.2018