几种网络IO模型
一.有哪些IO模型
● 阻塞I/O模型:应用程序发起I/O操作后会被阻塞,直到操作完成才返回结果。适用于对实时性要求不高的场景。
● 非阻塞I/O模型:应用程序发起I/O操作后立即返回,不会被阻塞,但需要不断轮询或者使用select/poll/epoll等系统调用来检查I/O操作是否完成。适合于需要进行多路复用的场景,例如需要同时处理多个socket连接的服务器程序。
●I/O 多路复用模型:通过select、poll、epoll等系统调用,应用程序可以同时等待多个I/O操作,当其中任何一个I/O操作准备就绪时,应用程序会被通知。适合于需要同时处理多个I/O操作的场景,比如高并发的服务端程序。
● 信号驱动I/O模型:应用程序发起I/O操作后,可以继续做其他事情,当I/O操作完成时,操作系统会向应用程序发送信号来通知其完成。适合于需要异步I/O通知的场景,可以提高系统的并发能力。
● 异步I/O模型:应用程序发起I/O操作后可以立即做其他事情,当I/O操作完成时,应用程序会得到通知。异步I/O模型由操作系统内核完成I/O操作,应用程序只需等待通知即可。适合于需要大量并发连接和高性能的场景,能够减少系统调用次数,提高系统效率。
画图说明
1.阻塞 IO
线程被挂起,什么都干不了,最简单,也最常用
你点完外卖,就在门口死等,外卖不到,你就一直在那里不走
2.非阻塞 IO 模型
线程不被挂起,但是要一遍一遍轮询,CPU空转
你 每30s开一次门看看外卖到没,没到就回到屋子里刷手机,过一会再开门
3.IO 多路复用
4.信号驱动I/O模型
5.异步I/O模型