linux系统中,一切皆文件,在操作文件过程中使用不同操作模式会对性能造成极大影响。目前linux存在五种IO模型。
同步阻塞IO
同步阻塞IO是最简单,最常用的模型,其流程为用户线程向内核空间发起调用,内核空间将数据准备好后返回到用户空间,在此过程中用户线程阻塞。
同步非阻塞IO
同步非阻塞IO是在同步阻塞IO的基础上,将socket设置为NONBLOCK。这样做用户线程可以在发起IO请求后可以立即返回,但用户线程需要不断循环获取内核处理结果。
IO多路复用
IO多路复用是目前使用较广泛的一种IO模型,用户线程监听socket,有请求时先请求到内核空间,待内核空间数据准备就绪,返回用户线程socket可读后,执行read操作。目前IO多路复用有三种实现方式分别为select、poll、epoll。从调用方式来说,前两种都是通过轮询获取内核结果,epoll则是事件驱动,监听内核事件变化进行处理。
信号驱动IO
用户线程发起请求后立刻返回,待内核处理完后发送信号给用户线程,用户线程接到信号进行处理。
异步IO
用户线程发起调用后立刻返回,由内核处理完毕后将数据返回。