LINUX.ORG.RU

История изменений

Исправление Legioner, (текущая версия) :

Почему? Если отправили запрос на удаленный сервер, то чтобы не ждать ответа и не блокировать тред, запускаем его асинхронно и тем самым другие файберы вытеснят ожидающий таск с треда и займутся другими делами.

Главным образом по следующим соображениям. БД оптимально работает, когда число соединений не больше числа ядер. Т.е. если у тебя 8 ядер, то максимум ставить 8-10 соединений. Можно поставить чуть больше, если БД кривая и часто упирается в I/O. Но в любом случае это не сотни соединений.

Поэтому можно либо делать асинхронную обвязку для драйвера, при которой работает пул из 10 потоков и имитирует асинхронность, либо, что разумней, спокойно блокировать поток и не страдать ерундой, а следующие запросы обрабатывать другим потоком. Асинхронное тут будет только получение коннекта.

По крайне-мере в go или erlang примерно так, как я понимаю?

В go и erlang совсем другой рантайм. Имитировать его никому не нужно.

Исходная версия Legioner, :

Почему? Если отправили запрос на удаленный сервер, то чтобы не ждать ответа и не блокировать тред, запускаем его асинхронно и тем самым другие файберы вытеснят ожидающий таск с треда и займутся другими делами.

Главным образом по следующим соображениям. БД оптимально работает, когда число соединений не больше числа ядер. Т.е. если у тебя 8 ядер, то максимум ставить 8-10 соединений. Можно поставить чуть больше, если БД кривая и часто упирается в I/O. Но в любом случае это не сотни соединений.

Поэтому можно либо делать асинхронную обвязку для драйвера, при которой работает пул из 10 потоков и имитирует асинхронность, либо, что разумней, спокойно блокировать поток и не страдать ерундой, а следующие запросы обрабатывать другим потоком.

По крайне-мере в go или erlang примерно так, как я понимаю?

В go и erlang совсем другой рантайм. Имитировать его никому не нужно.