Netty中的线程处理EventLoop

Netty是用什么来处理线程的?编程

通常线程池化模式为安全

  • 从池的空闲任务列表中选择一个Thread,指派它取运行一个已提交的任务
  • 任务完成时,该Thread返回给该列表,使其能够重用

运行任务处理的在编程上的构造一般称做事件循环,Netty使用EventLoop来描述。一个EventLoop将由一个永远不会变的Thread驱动,它能够被指派给多个channel,任务提交给Eventloop以后能够当即执行或者调度执行。任务的执行顺序是以先进先出的顺序执行。异步

Netty是用什么作任务调度的?

jdk在concurrent包中的ScheduledExecutorService来执行调度,它做为线程管理的一部分,会有额外的线程建立,可是当有大量的任务被紧凑的调度的时候,这有可能成为瓶颈,EventLoop继承了它,并且任务调度不存在这个问题。oop

要实现延迟执行,只需调用schedule方法便可,要间隔一段时间,每次执行,则调用scheduledAtFixedRate,想要取消调度则是经过返回的scheduledFuture调用cancel线程

EventLoop的执行逻辑是怎样的?


获取当前的执行线程以后,判断是否是分配给eventLoop的线程,若是是就直接执行,不然放到队列里面稍后执行,这中模式就是Netty线程模式的卓越性,不用关心线程安全和同步相关问题cdn

异步传输和同步传输对eventLoop来说线程分配有什么不一样?

异步传输用的是少许的eventloop,以及与之对应分配的Thread,经过一个线程来支撑多个channel(以此来实现少许线程支撑大量的channel),同步传输则是每一个channel一个线程blog

相关文章
相关标签/搜索