Как устроен Netty?

203
16 февраля 2019, 19:20

Немного почитал про асинхронные сокеты и про фреймворк Netty, но у меня возник вопрос о том как устроен механизм обработки многочисленных запросов к Netty. Изучив немного код Netty, я что-то понял, но боюсь что о многих аспектах работы Netty у меня может возникнуть неправильное представление. Я сейчас попытаюсь описать механизм обработки запросов и если в чем-то буду неправ, прошу поправить, так как хочу окончательно разобраться в его работе.

1) В Netty есть селекторы, которые путем итерации по пулу запросов(без какой-либо стратегии выбора) выбирают очередной запрос для обработки, запросы как я понял обрабатываются строго в том порядке в котором они были получены сервером

2)Если Потоков обработки больше одного и каждый задействует селектор, то может быть так что на один запрос будут претендовать несколько потоков обработки, в таком случае как они синхронизированы между собой?

3) Одно соединение обрабатывается только одним конкретным потоком обработки или это соединение может обрабатываться несколькими потоками, допустим клиент подключился к Netty серверу и посылает запросы и все эти запросы обрабатываются только одним потоком по очереди или же разные запросы от одного клиента могут обрабатываться разными потоками обработки?

Answer 1
  1. Стратегия селекторов зависит от выбранного транспорта, но да "запросы обрабатываются строго в том порядке в котором они были получены сервером".
  2. Потоков по умолчанию столько, сколько процессоров, но выполняются они неконкурентно. Каждый метод хэндлера или колбэк выполняется в некоторый момент времени только одним потоком. Поэтому синхронизация не нужна, если всё делать правильно.
  3. Читать предыдущий пункт. Лучше не иметь разделяемого состояния между хэндлерами, но в остальном весь execution flow можно рассматривать как однопоточный.

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

READ ALSO
Почему не работает подключенный Jackson(2.6.1)? Как подключить Jackson к отдельному модулю?

Почему не работает подключенный Jackson(2.6.1)? Как подключить Jackson к отдельному модулю?

Допустим, проект называется А, состоит из 4 модулей, как подключить библиотеку не ко всему проекту А, а, например, только ко 2 модулю?

198
Поочередное выполнение задач

Поочередное выполнение задач

Есть рабочий код на одну задачу деления в столбикНужно добавить еще одну задачу

183
Не могу понять принцип работы кода, Треугольник Серпинского

Не могу понять принцип работы кода, Треугольник Серпинского

Не могу понять по какому принципу работает этот кодЭто первая часть кода:

188