5.4 IO多路复用与线程进程
IO多路复用
1 单线程并发的含义
IO多路复用即单线程并发,事件驱动模型。有事件响应机制、事件回调机制等。
单线程并发,并非真正意义上的单线程。而是只有单一的用户线程。还包括数据库,socket等系统多线程。
单个用户线程:对于十万个用户同时访问服务器,有两种方式处理并发。
- 为每个用户开一个新的用户线程,每个线程内部采用阻塞通信的方式,即同步通信,从数据库中取数据、与服务器通信等,直到得到结果,返回给用户。其中涉及多个用户线程。
- 只有一个用户线程,采用非阻塞通信的方式,即异步通信,通过事件驱动的方式实现并发。从数据库中取数据、与服务器通信或与其他进程通信,并不会阻塞线程的执行,每次数据获取完毕,通过事件的方式,调用用户进程,处理得到的数据,返回给用户。其中,只有一个用户进程。
- 对于事件驱动的方法:会存在一个事件队列,唯一的用户进程会不断地依次处理队列中的事件。所以不会存在冲突。有两种处理事件的方法:基于监听器的事件处理机制和基于回调的事件处理机制。
常见的线程通信:与服务器进行通信socket,与数据库进行通信、与文件读写进程进行通信。
前者通过扩展空间的方式,后者通过缩短时间的方式。更快速地执行操作。
2 同步与异步 阻塞与非阻塞
- 老张把水壶放到火上,立等水开。(同步阻塞)老张觉得自己有点傻
- 老张把水壶放到火上,去客厅看电视,时不时去厨房看看水开没有。(同步非阻塞)老张还是觉得自己有点傻,于是变高端了,买了把会响笛的那种水壶。水开之后,能大声发出嘀~~~~的噪音。
- 老张把响水壶放到火上,立等水开。(异步阻塞)老张觉得这样傻等意义不大
- 老张把响水壶放到火上,去客厅看电视,水壶响之前不再去看它了,响了再去拿壶。(异步非阻塞)
多线程同步阻塞。
单线程异步非阻塞:通过事件响应机制,包括监听器和回调两种方法,实现单线程,异步非阻塞。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Estom的博客!










