网站设计网站制作,上海原画培训机构排名,平面设计在哪里接单,《jsp网站开发详解》百度云高级IO#xff1a;
五种典型IO#xff1a;
阻塞IO/非阻塞IO/信号驱动IO/异步IO/IO多路转接 IO多路转接模型#xff1a;select/poll/epoll
五种典型IO
阻塞IO
IO操作的流程#xff1a;等待IO操作条件具备#xff0c;然后进行数据拷贝 为了完成IO操作发起调用#xff…高级IO
五种典型IO
阻塞IO/非阻塞IO/信号驱动IO/异步IO/IO多路转接 IO多路转接模型select/poll/epoll
五种典型IO
阻塞IO
IO操作的流程等待IO操作条件具备然后进行数据拷贝 为了完成IO操作发起调用若当前不具备IO操作条件则等待直到条件具备完成IO操作后调用返回 钓鱼的时候手里一直握着鱼竿等待?上钩。
非阻塞IO
为了完成IO操作发起调用若当前不具备IO操作条件则立即报错返回可以干点其他的事情循环过来进行判断 把鱼竿放下去去做其他事情隔一段时间过来看一次缺点回来时?跑了。所以出现信号驱动IO 非阻塞IO往往需要程序员循环的方式反复尝试读写文件描述符, 这个过程称为轮询. 这对CPU来说是较大的浪费, 一 般只有特定场景下才使用.
信号驱动IO
提前对IO信号自定义处理方式当IO条件具备时操作系统通过信号通知进程这时候IO条件已经具备直接发起调用进行数据拷贝 钓鱼的时候抛出鱼竿在鱼竿上绑上一个铃铛如果?咬钩了就能及时知道了
异步IO
IO操作条件的等待与数据拷贝都由操作系统来进行等待与操作等到IO操作完成后通过信号通知进程进程直接对数据进行操作 钓鱼的时候抛出鱼竿找个人帮你钓鱼调到?了叫一下你
总结
IO几种操作中IO操作效率越来越高但是流程控制越来越复杂
高级IO重要概念
阻塞与非阻塞
阻塞当前不具备操作条件时调用挂起等待直到条件具备完成操作后调用返回非阻塞当前不具备操作条件调用直接报错返回阻塞与非阻塞:关注的并不是操作是否完成而是调用是否立即返回
同步通信 vs 异步通信
同步当前不具备操作条件时调用挂起等待直到条件具备完成操作后调用返回 异步发起操作的调用这个操作并不由自己完成由别人完成 同步与异步关注的是操作是否由自己完成 同步通常是阻塞的但是异步有阻塞也有非阻塞 异步阻塞发起调用完成功能功能由操作系统完成但是进程自身一直等待操作系统完成完成完成之后返回 异步非阻塞发起调用完成功能功能由操作系统完成进程自身立即返回 所谓同步就是在发出一个调用时在没有得到结果之前该调用就不返回. 但是一旦调用返回就得 到返回值了; 换句话说就是由调用者主动等待这个调用的结果; 异步则是相反调用在发出之后这个调用就直接返回了所以没有返回结果; 换句话说当一个异步 过程调用发出后调用者不会立刻得到结果; 而是在调用发出后被调用者通过状态、通知来通知调用 者或通过回调函数处理这个调用.
同步和异步关注的是消息通信机制.
了解Linux下的AIO—异步IO
https://blog.csdn.net/brucexu1978/article/details/7085924
IO多路转接/IO多路复用
对大量描述符进行事件监控可读事件/可写事件/异常事件监控
作用
前边基本的tcp服务器只能与一个客户端通信一次因为服务器端不知道新的客户端连接请求以及客户端数据什么时候到来因此程序流程只能写死导致程序会卡死在accept/recv这里假设服务端若是知道什么时候新的客户端连接起来这时候再调用accept程序流程就不会卡再accept这里假若服务端知道什么时候客户端的数据到来然后再进行recv程序流程就不会卡在recv这里这时候服务端就可以实现并发操作谁有数据到来就操作谁否则不进行操作
IO多路转接
替进程监控大量描述符什么时候有什么事件进而进程可以针对发生了相应事件的描述符进行相应操作
IO多路转接模型
selectpollepoll