eventloop
是如何切换线程的。
看 netty
的源码,如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| static void invokeChannelRead(final AbstractChannelHandlerContext next, Object msg) { final Object m = next.pipeline.touch(ObjectUtil.checkNotNull(msg, "msg"), next); EventExecutor executor = next.executor(); if (executor.inEventLoop()) { next.invokeChannelRead(m); } else { executor.execute(new Runnable() { public void run() { next.invokeChannelRead(m); } }); }
}
|
如果两个 handler
绑定的是同一个线程,直接调用,否则,将调用代码包装成一个任务对象,由下一个 handler
的线程调度。