История изменений
Исправление
Legioner,
(текущая версия)
:
Почему? Если отправили запрос на удаленный сервер, то чтобы не ждать ответа и не блокировать тред, запускаем его асинхронно и тем самым другие файберы вытеснят ожидающий таск с треда и займутся другими делами.
Главным образом по следующим соображениям. БД оптимально работает, когда число соединений не больше числа ядер. Т.е. если у тебя 8 ядер, то максимум ставить 8-10 соединений. Можно поставить чуть больше, если БД кривая и часто упирается в I/O. Но в любом случае это не сотни соединений.
Поэтому можно либо делать асинхронную обвязку для драйвера, при которой работает пул из 10 потоков и имитирует асинхронность, либо, что разумней, спокойно блокировать поток и не страдать ерундой, а следующие запросы обрабатывать другим потоком. Асинхронное тут будет только получение коннекта.
По крайне-мере в go или erlang примерно так, как я понимаю?
В go и erlang совсем другой рантайм. Имитировать его никому не нужно.
Исходная версия
Legioner,
:
Почему? Если отправили запрос на удаленный сервер, то чтобы не ждать ответа и не блокировать тред, запускаем его асинхронно и тем самым другие файберы вытеснят ожидающий таск с треда и займутся другими делами.
Главным образом по следующим соображениям. БД оптимально работает, когда число соединений не больше числа ядер. Т.е. если у тебя 8 ядер, то максимум ставить 8-10 соединений. Можно поставить чуть больше, если БД кривая и часто упирается в I/O. Но в любом случае это не сотни соединений.
Поэтому можно либо делать асинхронную обвязку для драйвера, при которой работает пул из 10 потоков и имитирует асинхронность, либо, что разумней, спокойно блокировать поток и не страдать ерундой, а следующие запросы обрабатывать другим потоком.
По крайне-мере в go или erlang примерно так, как я понимаю?
В go и erlang совсем другой рантайм. Имитировать его никому не нужно.