1. 概念一
内核空间/用户空间:
进程的虚拟地址空间总体分为用户空间和内核空间,4G内存为例:低地址上的 3GB 属于用户空间, 高地址的 1GB 是内核空间,这是基于安全上的考虑,用户程序只能访问用户空间,内核程 序可以访问整个进程空间,并且只有内核可以直接访问各种硬件资源,比如磁盘和网卡
流程:
当用户线程发起I/O调用后,网络数据读取会经历两个步骤:
a. 用户线程等待内核讲数据从网卡copy 到内核空间 (阻塞非阻塞)
b. 内核将数据从内核空间copy 到应用空间 (同步/非同步)
BIO | 同步阻塞IO | accept阶段:线程到内核是阻塞的,read阶段:内核空间到应用空间也是同步 | 连接数小且固定的架构 | |
NIO | 同步非阻塞IO | accept阶段:用户线程到内核是非阻塞的,read阶段:内核空间到应用空间是同步 | 链接数多&链接时间比较短的架构 | reactor |
AIO | 异步非阻塞IO | accept与read阶段都使用用回调函数的形式 | 链接数据多且需要长时间链接 | Proactor |