网络IO本质:
任何IO事件处理可以分为两个过程:
等待数据 和 数据拷贝 (内核空间—>用户空间)
从进程级来看,同步与阻塞、异步和非阻塞是同义词,从计算机系统层面则有以下差别:
阻塞非阻塞 | 同步异步 |
---|---|
等待数据是否会阻塞进程 | 数据拷贝时是否会阻塞进程 |
阻塞IO | 非阻塞IO |
---|---|
用户进程进入 waiting 状态,直到数据被拷贝到进程空间中,CPU 才唤醒线程。 | CPU 并不将当前进程设置为 waiting 状态,而是check: 1)在没有准备好数据时,返回一个 EWOULDBLOCK 的错误给线程。2)在数据准备好时,将数据从内核空间复制到进程空间,然后返回 OK 给进程 |