网络与I/O

Netty的高性能设计

2021-07-01  本文已影响0人  肥兔子爱豆畜子

基于不断的对Netty框架和系统底层知识的理解过程,总结Netty采用的高性能技术与设计,构建自己的认知体系。不断完善中~

EventLoop封装了IO相关的方法,非IO线程执行这些方法时,内部会将IO操作封装成task,根据channel与EventLoop的对应关系,提交到EventLoop内部的一个高性能CAS无锁队列里(org.jctools.queues.MpscUnboundedArrayQueue),所以io task都由IO线程来执行,io线程一直不断循环处理:向selector轮询ACCEPT,READ,WRITE,CONNECT等IO事件->处理IO事件->处理队列里非io线程提交上来的io操作,这样一个loop过程。

这里有个细节,站在EventLoop的这些IO相关的方法的角度,需要判断当前的io操作是绑定到本EventLoop的IO线程调用的,还是非IO线程调用的,如果是前者,如果是则直接执行,否则入队列,这就是inEventLoop()方法的作用。

关于EventLoop内置的那个无锁队列,可以参考https://my.oschina.net/hmilyylimh/blog/1787788

上一篇下一篇

猜你喜欢

热点阅读