既然有了MESI协议为什么还要volatile来保证可见性

在和同事交流volatile的时候谈到了内存屏障然后听到了一个新词MESI协议,然后做了深入的了解。看的越多不懂的越多。

本篇目的是记录解决一个问题:既然有了MESI协议为什么还要volatile来保证可见性?

CPU缓存一致性协议,MESI(Modified Exclusive Shared Or Invalid)(也称为伊利诺斯协议,是因为该协议由伊利诺斯州立大学提出)是一种广泛使用的支持写回策略的缓存一致性协议。

阅读全文

Netty解析九:EventLoop的基类SingleThreadEventLoop

在解析NioEventLoopGroup中可以看到最终处理逻辑的是NioEventLoop,而且NioEventLoop是继承SingleThreadEventLoop,考虑先将SingleThreadEventLoop看明白。

SingleThreadEventLoop的子类

可以看到SingleThreadEventLoop有众多子类。

阅读全文

Netty解析八:可写的Future类【Promise】

Special {@link Future} which is writable.

Promise的类注释中描述了它的用途:特殊的Future是可修改的。

Promise在Netty中代表任务执行的结果。

阅读全文

Netty解析七:快速的FastThreadLocal

从DefaultThreadFactory到FastThreadLocalThread再到FastThreadLocalRunnable的解析过程中可以发现这些类的作用都是在为FastThreadLocal作处理。

所以本篇开始解析FastThreadLocal,FastThreadLocal是ThreadLocal的高性能实现。

阅读全文

Netty解析六:DefaultThreadFactory与FastThreadLocalThread

在构建NioEventLoopGroup需要传入线程池Executor,默认是使用它的父类MultithreadEventLoopGroup.newDefaultThreadFactory()方法返回的DefaultThreadFactory。

所以本篇讲解DefaultThreadFactory与FastThreadLocalThread。

阅读全文

Netty解析五:SelectStrategyFactory及其实现

同样的在构造器中看到了SelectStrategyFactory参数,所以先对SelectStrategyFactory类进行解析。

阅读全文

Netty解析四:EventExecutorChooserFactory及其实现

在前面解析了NioEventLoopGroup,其中构造器中需要EventExecutorChooserFactory,所以本篇就解析EventExecutorChooserFactory。

EventExecutorChooserFactory是用于构建执行选择器(EventExecutorChooser)的工厂。

阅读全文

Netty解析三:SelectorProvider解析

在上一篇中解析了NioEventLoopGroup,其中构造器中需要SelectorProvider,所以本篇就解析SelectorProvider。

阅读全文

Netty解析二:NioEventLoopGroup解析

上一篇简单列举了几个核心接口,但是对于各个接口的功能并不能合理描述,所以接下来开始从实现类的角度去解析,更利于理解各个接口的设计与功能。

本篇解析NioEventLoopGroup以及它关联的一些接口或类。

阅读全文

Netty解析一:EventLoopGroup解析

每次写Netty代码的时候第一行都会写下面的代码:

1
2
EventLoopGroup boss = new NioEventLoopGroup();
EventLoopGroup worker = new NioEventLoopGroup();

所以源码解析也从EventLoopGroup开始。该篇只是简单列举了几个接口,缺乏实现类所以功能描述上有所欠缺。

阅读全文