Socket:
-
具有管道文件的性质,类似队列、先进先出
-
具有文件描述符
-
编程接口
IO多路复用:
- 单个线程处理多个Socket
- 核心问题:内核分发消息
- select模型:线程维护一个 Socket FD 的列表
- epoll模型:内核维护一个高效的二叉搜索树
Blocking IO(BIO):
- 操作会阻塞线程
- 利用cpu中断,阻塞的线程进入休眠,将执行权限交给其他线程
- 优点:1.阻塞时不会占用系统资源;2.程序好理解
- 缺点:1.高并发场景需要较高的线程数量(资源占用);2.线程切换有成本
- 适用范围:一般的高并发场景也可以考虑,并行量特别大的场景,如聊天除外
Non-Blocking IO(NIO):
- 操作不会阻塞线程,读不到就返回null
- 原理:由专门的数据结构负责统计发生的I/O,再允许程序监听变更
Asynchronous IO(AIO):
- 异步编程(基于Future)
- 原理:利用线程池技术、协程技术,调度所有Future的计算,通常结合epoll和directmemory技术
N(new)IO:
-
NIO的Channel设计
-
DirectMapping
-
本质是堆外的缓冲区
-
优化点:减少一次拷贝
-