Netty是用什么来处理线程的?编程
通常线程池化模式为安全
运行任务处理的在编程上的构造一般称做事件循环,Netty使用EventLoop来描述。一个EventLoop将由一个永远不会变的Thread驱动,它能够被指派给多个channel,任务提交给Eventloop以后能够当即执行或者调度执行。任务的执行顺序是以先进先出的顺序执行。异步
jdk在concurrent包中的ScheduledExecutorService来执行调度,它做为线程管理的一部分,会有额外的线程建立,可是当有大量的任务被紧凑的调度的时候,这有可能成为瓶颈,EventLoop继承了它,并且任务调度不存在这个问题。oop
要实现延迟执行,只需调用schedule方法便可,要间隔一段时间,每次执行,则调用scheduledAtFixedRate,想要取消调度则是经过返回的scheduledFuture调用cancel线程
获取当前的执行线程以后,判断是否是分配给eventLoop的线程,若是是就直接执行,不然放到队列里面稍后执行,这中模式就是Netty线程模式的卓越性,不用关心线程安全和同步相关问题cdn
异步传输用的是少许的eventloop,以及与之对应分配的Thread,经过一个线程来支撑多个channel(以此来实现少许线程支撑大量的channel),同步传输则是每一个channel一个线程blog