既然有了MESI协议为什么还要volatile来保证可见性
在和同事交流volatile的时候谈到了内存屏障然后听到了一个新词MESI协议,然后做了深入的了解。看的越多不懂的越多。
本篇目的是记录解决一个问题:既然有了MESI协议为什么还要volatile来保证可见性?
CPU缓存一致性协议,MESI(Modified Exclusive Shared Or Invalid)(也称为伊利诺斯协议,是因为该协议由伊利诺斯州立大学提出)是一种广泛使用的支持写回策略的缓存一致性协议。
在和同事交流volatile的时候谈到了内存屏障然后听到了一个新词MESI协议,然后做了深入的了解。看的越多不懂的越多。
本篇目的是记录解决一个问题:既然有了MESI协议为什么还要volatile来保证可见性?
CPU缓存一致性协议,MESI(Modified Exclusive Shared Or Invalid)(也称为伊利诺斯协议,是因为该协议由伊利诺斯州立大学提出)是一种广泛使用的支持写回策略的缓存一致性协议。
在解析NioEventLoopGroup中可以看到最终处理逻辑的是NioEventLoop,而且NioEventLoop是继承SingleThreadEventLoop,考虑先将SingleThreadEventLoop看明白。

可以看到SingleThreadEventLoop有众多子类。
Special {@link Future} which is writable.
Promise的类注释中描述了它的用途:特殊的Future是可修改的。
Promise在Netty中代表任务执行的结果。
从DefaultThreadFactory到FastThreadLocalThread再到FastThreadLocalRunnable的解析过程中可以发现这些类的作用都是在为FastThreadLocal作处理。
所以本篇开始解析FastThreadLocal,FastThreadLocal是ThreadLocal的高性能实现。
在构建NioEventLoopGroup需要传入线程池Executor,默认是使用它的父类MultithreadEventLoopGroup.newDefaultThreadFactory()方法返回的DefaultThreadFactory。
所以本篇讲解DefaultThreadFactory与FastThreadLocalThread。
同样的在构造器中看到了SelectStrategyFactory参数,所以先对SelectStrategyFactory类进行解析。
在前面解析了NioEventLoopGroup,其中构造器中需要EventExecutorChooserFactory,所以本篇就解析EventExecutorChooserFactory。
EventExecutorChooserFactory是用于构建执行选择器(EventExecutorChooser)的工厂。
在上一篇中解析了NioEventLoopGroup,其中构造器中需要SelectorProvider,所以本篇就解析SelectorProvider。
上一篇简单列举了几个核心接口,但是对于各个接口的功能并不能合理描述,所以接下来开始从实现类的角度去解析,更利于理解各个接口的设计与功能。
本篇解析NioEventLoopGroup以及它关联的一些接口或类。
每次写Netty代码的时候第一行都会写下面的代码:1
2EventLoopGroup boss = new NioEventLoopGroup();
EventLoopGroup worker = new NioEventLoopGroup();
所以源码解析也从EventLoopGroup开始。该篇只是简单列举了几个接口,缺乏实现类所以功能描述上有所欠缺。