Linux网络IO模型
同步异步,阻塞和非阻塞
同步和异步
关注的是结果消息的通信机制
同步的意思是调用方需要主动等待结果的返回。
异步的意思是不需要主动等待结果的返回,而是通过状态通知,回调函数等。
阻塞和非阻塞
主要关注的是等待结果返回调用方的状态
阻塞:是指结果返回之前,当前线程被挂起,不做任何事情。
非阻塞:结果返回之前,线程可以做其他事情,不会被挂起。
五种I/O模型
阻塞I/O模型
非阻塞I/O模型
I/O复用模型
信号驱动I/O
异步I/O模型
5个IO模型比较
NIO
和BIO的主要区别
- 面向流和面向缓冲
BIO是面向流的,NIO是面向缓冲的。 - 阻塞和非阻塞IO
面向流是阻塞的,一个线程调用read或write的时候,线程被阻塞,直到有一些数据被读取,此期间不能做任何事情。
而加入buffer则不会保持线程阻塞。 - 选择器
NIO的选择器允许一个单独的线程来监视多个输入通道,这种选择器机制,使得一个单独的线程容易管理多个通道。
NIO核心部分
NIO有三个核心部分:buffer缓冲区,Channel管道和Selector选择器
Selector:应用程序将向Selector对象注册需要它关注的Channel以及具体的某一个Channel会对哪些IO事件感兴趣。
Channel:是一个应用程序和操作系统交互事件,传递内容的渠道。ServerSocketChannel:应用服务器程序的监听通道,只有通过这个通道,应用程序才能向操作系统注册支持多路复用IO的端口监听。ScoketChannel:TCP Socket套接字的监听通道,一个Socket套接字对应了一个客户端IP.
NIO在这个博客讲的很好,可以参考
https://blog.csdn.net/weixin_37778801/article/details/86699341