同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别?以前听到这些名词很模糊,今天理了一下。
操作系统分用户空间与内核空间。32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32次方)。
linux操作系统而言,内核空间:最高的1G字节(从虚拟地址0xC0000000到0xFFFFFFFF)
用户空间: 较低的3G字节(从虚拟地址0x00000000到0xBFFFFFFF)
内存数据会先被拷贝到操作系统内核的缓冲区中,然后才会从操作系统内核的缓冲区拷贝到用户空间的地址空间。
linux系统产生了下面五种网络模式的方案。
- 阻塞 I/O(blocking IO)
- 非阻塞 I/O(nonblocking IO)
- I/O 多路复用( IO multiplexing)
- 信号驱动 I/O( signal driven IO)
- 异步 I/O(asynchronous IO)
我的总结:
数据的过程两步: 1.外部数据->内核空间
2.内核空间->用户空间
1.阻塞I/O 过程一步步走 外-》内核 卡住
内核-》用户
2.非阻塞I/O 没数据返回error
外-》内核 没数据 返回error
内核-》用户 没数据就返回
3.I/O 多路复用 事件驱动 select poll epoll
与第一个比:100个socket 有几个有数据就返回几个
外->内 卡住 ,只是SOCKET是多个的
内核-》用户
4.异步I/O 外-》内核 没数据直接返回
内核-》用户 没数据直接返回