【发布时间】:2012-03-24 02:00:25
【问题描述】:
当达到 MemoryAwareThreadPoolExecutor 的通道或总阈值时,通道会发生什么? MemoryAwareThreadPoolExecutor 设置为 ExecutionHandler,它位于 I/O-Handler 之前的每个管道上。
我目前的信息状态:
我发现:channel.setReadable(false) 被调用。这意味着所有通道上的所有读取操作都停止了,对吗?所以传入的数据不会被传递到任何管道,不是吗?
如果我做对了,您应该将管道末端的代码分为非阻塞业务处理程序和阻塞业务处理程序,在阻塞处理程序之前有一个执行处理程序。
示例:-> 解码器、编码器、NonBlockingHandler、ExecutionHandler、I/O-Handler
我认为在执行处理程序之前至少将消息发送到最后一个处理程序会更好。如果我是对的,那么在执行处理程序的线程池再次低于阈值之前,不需要由 I/O-Handler 处理的消息将不会进入 NonBlockingHandler。
我承认,这并不能保证每个频道按接收顺序执行消息。但是我们假设没有必要。
向 Netty 致以最诚挚的问候和欢呼!
【问题讨论】:
标签: netty