前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Netty中的线程处理EventLoop

Netty中的线程处理EventLoop

作者头像
爬蜥
发布2019-07-09 10:45:51
7560
发布2019-07-09 10:45:51
举报

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

一般线程池化模式为

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

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

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

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

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

EventLoop的执行逻辑是怎样的?

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

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

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年05月15日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Netty是用什么做任务调度的?
  • EventLoop的执行逻辑是怎样的?
  • 异步传输和同步传输对eventLoop来讲线程分配有什么不同?
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档