IO/NIO多路复用器

基本概念:
kernel(内核):基于硬件的第一层软件扩充,是操作系统的核心,提供操作系统最基础的功能,是操作系统的基础。它为众多应用软件提供计算机硬件的安全访问的一部分软件,
这种访问资源是有限的,并且内核决定一个程序对某部分硬件资源分配和占用多久进行管理。直接对硬件操作是非常复杂的,所以内核通过提供硬件抽象的方法来完成操作,硬件的抽象隐藏了复杂性,
对软件提供和硬件交互的一个简洁的接口,是程序设计更为简单。它主要对系统进程管理、内存管理、设备管理、网络管理及文件系统管理。
在这里插入图片描述

file descriptor(文件描述符):内核利用文件描述符来访问文件。文件描述符是非负整数。打开现存文件或新建文件时,内核会返回一个文件描述符。
systemcall(系统调用):把应用程序的请求传给内核,调用相应的的内核函数完成所需的处理,将处理结果返回给应用程序。
recvfrom:本函数用于从(已连接)套接口上接收数据,并捕获数据发送源的地址。
阻塞IO:
在这里插入图片描述
io: recvfrom进行系统调用等待返回数据(阻塞),内核等待获取数据----------数据完整到来,将数据从内核拷贝到用户进程空间--------返回结果(阻塞解除)。
缺点:用户进程在等待数据返回时可能因为数据量较大导致用户进程长时间阻塞。通常当有连接过来,我们可以新开启一个线程来等待读取数据,但当连接数量较多的时候,线程开销过大
非阻塞IO
在这里插入图片描述
nio: recvfrom进行系统调用立刻返回数据或者返回没有数据,如果没有数据,用户进程继续进行系统调用,不会阻塞。
缺点:用户进程要循环所有的socket连接,每循环会有o(n)系统调用,可能只有一个连接有数据。

多路复用器:
在这里插入图片描述

select: select进行系统调用(阻塞),监视所有select负责的连接,任意一个有数据则返回, 然后recvfrom进行系统调用获取数据。
缺点:与IO模型相比多了1次select系统调用,且调用时整个用户进程会被block。
epoll解决了内核/用户空间内存拷贝问题,epoll通过内核与用户空间同一块内存mmap实现,select复杂度o(n),epoll复杂度o(1);
select只是告诉你一定数目的流有事件了,至于哪个流有事件,还得你一个一个地去轮询,而epoll会把发生的事件告诉你,通过发生的事件,就自然而然定位到哪个流了
这几个io模型都是同步io模型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值