一、深入理解IO
1.1 服务端客户端通信
最简单的服务端通信模型
1.2 服务器通信过程分析
- cpu 计算和业务处理
- IO操作与等待,网络等待、磁盘IO、访问数据库等
cpu在处理某个任务时,可能大部分时间在等待网络IO、磁盘IO,在等待的时间段内大量的cpu资源就被浪费了。
对于一个高并发的这种IO密集型的网络处理的应用程序,不仅是IO需要花费时间,Linux 操作系统和驱动程序运行在内核空间,应用程序运行在用户空间,应用程序想要发送数据必须把数据拷贝从用户空间拷贝到内核空间,才能通过网卡等驱动程序发送出去,反之应用读取数据的过程也是如此。
1.3 阻塞与非阻塞,同步与异步
- 阻塞与非阻塞是指线程的处理模式;
- 同步异步是通信模式
1.4 五种IO模型
1.4.1 阻塞式IO(BIO)
1.4.2 非阻塞式IO
和阻塞 IO 类比,内核会立即返回,返回后获得足够的 CPU 时间继续做其它的事情。用户进程第一个阶段不是阻塞的,需要不断的主动询问 kernel 数据好了没有;第二个阶段依然总是阻塞的。
1.4.3 IO多路复用模型
IO多路复用(IO multiplexing),也称事件驱动IO(event-driven IO),就是在单个线程里同时监控多个套接字,通过 select 或 poll 轮询所负责的所有 socket,当某个 socket 有数据到达了,就通知用户进程。
IO 复用同非阻塞 IO 本质一样,不过利用了新的select 系统调用,由内核来负责本来是请求进程该做的轮询操作。看似比非阻塞 IO 还多了一个系统调用开销,不过因为可以支持多路 IO,才算提高了效率。
进程先是阻塞在 select/poll 上,再是阻塞在读操作的第二个阶段上。
1.4.4 信号驱动IO
1.4.5 异步IO
1.5 Netty框架
Netty是一个Java网络应用开发的框架
还没理解好,先挖坑!
1.6 压测
通过superbenchmarch对8801端口的压测
二、什么是高性能
- 高并发(concurrent users)
- 高吞吐量 (Throughout),tps、qps衡量
- 低延迟 (Low Letancy)
- 容量
一个接口的延迟是P99等于3毫秒,P是指postpone延迟,99%的请求在3ms内完成。
三、Netty如何实现高性能
从Reactor模型到Netty NIO
3.1Reactor主从模型
没看懂,挖坑!