初始阅读源码的时候,晦涩难懂,枯燥无味,一段时间之后就会觉得豁然开朗,被源码的魅力深深折服。
接下去要阅读的是netty的一个重要组件,NioEventLoop。
将会分为以下几点分析。
一、NioEventLoop源码
1、NioEventLoop创建(用户代码在创建bossGroup和workGroup的时候,NioEventLoop被创建)
2、NioEventLoop启动(NioEvent在首次执行execute方法的时候,会创建线程,并保存到NioEventLoop的成员变量里面)(boss线程的NioEventLoop在用户代码调用bond的时候启动)
二、回答如下问题:
1、默认情况下,netty服务器启动多少个线程?何时启动?
默认情况下cpu核心数的两倍;NioEventLoop在首次执行execute方法的时候,会创建线程,并保存到NioEventLoop的成员变量里面
2、netty是如何解决jdk空轮询的bug的?
计数的方式判断不符合执行时间的次数是否超过512,如果超过可能就有空轮询bug,新建一个selectot取代原来的selector,并把原来的key移交过去。
3、netty如何保证异步串行无锁化?
每次外部线程调用NioEventLoop的时候,判读是否inEventLoop来判断是否外部线程,并把任务丢到任务队列里面。在NioEventLoop执行逻辑的第三个过程,会把这些task挨个取出来执行。