Поскольку Netty Channel использует один поток как для входящей, так и для исходящей обработки, мне интересно узнать о рекомендуемой практике доставки входящих данных при использовании мультиплексированного протокола, такого как SPDY. Несколько вариантов, которые приходят на ум:
1) Доставить данные для всех потоков в приложение (т. е. неканальный код) с использованием потока канала. В этом случае доставка не требует дополнительного переключения контекста. Приложение должно уметь откладывать любую тяжелую работу на свои собственные потоки, чтобы быть «хорошим потребителем». Если этого не произойдет, это может эффективно заблокировать любую запись в канал на некоторое время (поскольку и чтение, и запись используют один и тот же поток).
2) Доставка с использованием отдельного исполнителя (опционально с привязкой потоков к потоку). В этом случае мы берем на себя переключение контекста на ранней стадии. Приложение, которое блокирует поток доставки, не будет блокировать конвейер Netty. Недостатком этого является то, что логика приложения в некоторых (возможно, во многих) случаях может быть довольно легкой и может не требовать переключения контекста.
3) Внедрить многопоточный EventLoop со сходством потоков для каждого потока. Это, однако, кажется, нарушает текущее предположение, что канал должен быть однопоточным. Я не уверен, что это жизнеспособно. Может быть, кто-то, кто больше разбирается во внутренностях Netty, может подтвердить?
Кто-нибудь знает о других соображениях или имеет дополнительные параметры, которые я пропустил?