Как стать автором
Обновить

Все, что вы хотели знать об обработке запросов, но стеснялись спросить

Время на прочтение 12 мин
Количество просмотров 18K
Всего голосов 23: ↑22 и ↓1 +21
Комментарии 5

Комментарии 5

А в какую категорию отнести такое?
Пул потоков, но IO операции происходят асинхронно, возвращая поток в пул на время операции, а по завершении, продолжают обрабатывать запрос, снова взяв поток из пула.
Похоже на сметь паттерна reactor и пула потоков, но при этом лишен недостатков обоих.

По описанию похоже на разновидность half sync/half async. Операции выполняются в контексте зеленого потока, а каждая IO операция выполняет переключение на другой зеленый поток, который работает в том же потоке операционной системы. Минусы в появлении дополнительного уровня абстракции и возможности по ошибке заблокировать поток операционной системы, вызвав синхронную операцию.

Но там нет зеленых потоков. Используется самый обычный пул потоков ОС. Так что абстракции нет, а вот заблокировать поток вызвав IO операцию синхронно можно.


Я интересуюсь, потому что вышеописанное — это стандартная модель которую предлагает .net'овский ASP.NET "из коробки".
Продолжение выполнения после IO операции достигается за счет async/await, причем не обязательно в том потоке, в котором запрос начинался.


Просто, ИМХО, это самая удачная модель для типичного веб сервиса, а у вас она, получается, не описана.

Тот же самый "reactor pattern", только с пулом потоков.


Насколько знаю, у nodejs сейчас тоже пул потоков.

Это интересно. Обязательно посмотрю на эту модель.
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории