Привет.
Вот уже несколько дней я исследую просторы интернета в поисках того, как работает асинхронность. Если поконкретнее, то я не могу понять как работает асинхронность на стороне сервера, например.
Вот как я вижу это сейчас: Сервер ждет клиента. Клиент отправляет запрос на сервер и идет по дальше своим делам. Сервер принимает запрос, обрабатывает его, а после отправляет клиенту.
А если будет к примеру, 10 000 клиентов? Как я понимаю, тут помогут два варианта: многопоточность или асинхронность (хотя, я так понимаю асинхронность реализуется за счет многопоточености). Так вот, как в таком случае реализуется асинхронность, чтобы не блокировать серверный сокет, который принимает соединение? Использовать отдельные потоки для установки соединения и обработки?
Хочу отметить, что я недавно начал изучать эту тему. Летали вопроса составил на ходу, так что могут быть ошибки и неточности.
Плохо и не понятно. Причем все обернуто магией, которую нужно понимать.
Под капотом там тот же пул потоков, который использовался и в событийной модели и тогда когда вы руками держали потоки.
Причем плохо в том что если не поймали исключение оно всплывает в самом неочевидном месте.
Второе на это все веселье тратятся ресурсы.
Из хорошего. Вы действительно можете оставить тяжелый код исполнятся в фоне.
Но!
* Не займите всю память
* Не превысьте количество потоков
* Не перейдите лимит соединений с базой
* Не сожрите весь IO
* Не убейте проц