线程模型确定了代码的执行方式
事件/任务的执行顺序 事件和任务是以先进先出(FIFO)的顺序执行的。这样可以通过保证字 节内容总是按正确的顺序被处理,消除潜在的数据损坏的可能性
运行任务来处理在连接的生命周期内发生的事件是任何网络框架的基本功能。 – 事件循环
需要在ChannelHandler中对出站事件进行仔细的同步,不可能保证多个线程 不会在同一时刻尝试访问出站事件.
Java5之后,使用java.util.concurrent包提供的ScheduleExecutorService
ScheduledExecutorService executor = Executors.newScheduledThreadPool(10); ScheduledFuture<?> future = executor.schedule(new Runnable() { @Override public void run() { System.out.println("60 seconds later"); } },60, TimeUnit.SECONDS);
使用EventLoop在netty中调度任务
//执行一次,若每隔60秒执行一次使用scheduleAtFixedRate,完全继承了ScheduledExecutorService的特性。 Channel ch = ... ScheduledFuture<?> future = ch.eventLoop().schedule( new Runnable() { @Override public void run() { System.out.println("60 seconds later"); } }, 60, TimeUnit.SECONDS);
用于非阻塞传输(NIO和AIO)的EventLoop的分配方式
用于阻塞(OIO)的分配方式
原文:https://www.cnblogs.com/fubinhnust/p/11940437.html