这只是自己学习Netty 记录的一些笔记和要点,不是什么正式的文件,写在网上,是怕以后忘了不好找,大家可以忽略了。
1. Unix 五种I/O模型, 阻塞I/O 非阻塞I/O I/O复用模型(se;ect/epoll) 信号驱动I/O模型 异步I/O
2.Netty 对selector的SelectionKey进行了优化,默认不开启,如果开启的话,可以利用反射将原有JAVA的SelectionKey替换
3.空轮询在jdk1.7 (含)以前会导致epoll死循环bug 为了解决该问题,对空轮询的发生次数做了计数,如果联系多次发生空轮询,则重新创建一个selector,并销毁旧的selector
4.Netty中可以设置I/O任务,与非I/O任务(TASK)的执行比例,如果发现非I/O任务占用了过多的时间,可以中断非I/O任务的执行,以防止非I/O任务占用太多CPU时间
5.ChannelFuture超时并不代表I/O超时,如果channelFuture超时后,没有关闭资源,I/O连接依然有可能成功,会导致严重的问题
6. Google 的Protobuf 序列化工具支持JAVA C++ python
7.JiBx 一种高效的java 和 XML 转换工具
8.reactor 的三种模型, 单线程模型, 多线程模型(一个线程负责accept 多个线程(组成池)负责I/O), 主从多线程模型
9.目前实现线程的方法主要有三种:
a.内核线程,这种线程有内核来完成线程切换,内核通过线程调度器对线程进行调度,并负责将线程任务映射到不同的处理器上。
b.用户线程实现, 用户线程是指完全建立在用户空间线程库上的线程,用户线程的创建、启动、运行、销毁、切换完全在用户态中完成,不需要内核的帮助,执行性能更高
c. 混合实现,将内核线程和用户线程混合在一起使用的方式.
SUN JDK在windows 和 Linux 操作系统上采用了内核线程的实现方式
10. 原子类底层是通过CAS来实现的