IO模型有哪些?

张开发
2026/6/22 6:30:07 15 分钟阅读
IO模型有哪些?
什么是IOIO就是输入输出拿谁是输入谁是输出呢计算机的IO计算机的主体分为输入设备和输出设备输入设备是向计算机输入数据和信息的设备键盘和鼠标都属于输入设备输出设备是计算机硬件系统的终端设备用于接收计算机数据的输出显示一般显示器和打印机都属于输出设备。例如鼠标敲几下键盘把指令数据传给主机主机通过运算后把返回的数据信息输出到显示器。鼠标显示器这只是直观表面的输入输出。只要是涉及计算机核心与其他设备间数据迁移的过程就是IO一、阻塞IO它的特点是在内核将数据准备好之前系统调用会一直等待着。二、非阻塞IO非阻塞IO如果内核还未将数据准备好系统调用仍然会直接返回并返回错误码EWOULDBLOCK非阻塞IO往往需要程序员循环的方式反复尝试读写文件描述符这个过程称为轮询。这对CPU来说是较大的浪费一般只有特定场景才使用。阻塞调用是指用结果返回之前当前线程会被挂起调用线程只有在得到结果之后才会返回。非阻塞调用是指在不能立刻得到结果之前该调用不会阻塞当前线程。三、信号驱动IO内核将数据准备好的时候使用SIGIO信号通知应用程序进行IO操作。工作流程1.注册信号处理程序;应用进程首先使用sinaction系统调用建立针对特定信号的信号处理程序。这一步进程会告知内核当特定的IO事件发生时应该触发哪个信号处理函数。就像提前告知你哪把锁用哪把钥匙开2.设置文件描述符应用进程需要将相关文件描述符设置为信号驱动IO模式并指定该文件描述符的属主。这一步确保内核知道当IO事件就绪时应该向哪个进程发送信号。告诉内核这个IO资源归我管了事件就绪后把SIGIO信号发给我这个进程3.内核等待数据完成上述设置后应用进程可以干别的事情了内核开始等待数据到达。当数据准备好时内核会向应用进程发送预先设置好的信号。4.信号处理应用进程接收到信号后会暂停当前正在执行的任务转而执行之前注册的信号处理程序。在信号处理程序中通常会调用函数来读取数据。在数据从内核拷贝到用户空间的应用到应用缓冲区期间进程会阻塞直到数据拷贝完成5.处理数据数据读取完成后信号处理程序执行结束进程恢复之前被暂停的任务或者开始对读取到的数据进行处理。四、多路复用IO多路复用允许单个线程/进程同时监控多个文件描述符的IO事件并在任一描述符就绪时进行读写操作。是高并发的核心技术之一。是真正的高校IO处理机制它在单位事件内增加了传输效率而其他四个只是在利用等待事件而已并没有提高IO效率。核心思想1.统一监控通过系统调用一次性注册多个文件描述符由内核通知哪些描述符已就绪。2.避免阻塞轮询无需为每个描述符创建独立线程节省资源。3.单线程高并发一个线程可以处理成千上万的连接如Nginx,Redis的底层模型五、异步IO核心思想是发起IO请求后立即返回由内核完成所有操作并通过回调或信号通知进程结果。不需要等待IO完成即可继续执行其他任务

更多文章