网站小视频怎么做,wordpress 手机样式,企业邮箱模板,wordpress 订单管理注#xff1a;还有一种信号驱动IO#xff0c;使用较少暂不讨论#xff1b; 一#xff0c;区分阻塞、非阻塞和同步、异步 看了很多文章对这两组概念解释和对比#xff0c;说的太复杂了#xff0c;其实没必要#xff0c;两句话就能说清楚。 首先#xff0c;对于读数据rec… 注还有一种信号驱动IO使用较少暂不讨论 一区分阻塞、非阻塞和同步、异步 看了很多文章对这两组概念解释和对比说的太复杂了其实没必要两句话就能说清楚。 首先对于读数据recv或read写数据同理分两个阶段 等待数据可读 系统调用讲数据从内核拷贝到用户空间 然后对比两组概念 阻塞、非阻塞是对于等待数据可读、可写时是否死等即看第一阶段 同步、异步是对于数据在用户空间和内核传递时是否等待完成即看第二阶段 可以得出结论阻塞IO、非阻塞IO、多路复用都属于同步IO区别于异步IO。 二关于多路复用 多路复用介绍参考万字图解| 深入揭秘IO多路复用-腾讯云开发者社区-腾讯云 IO 多路复用的复用指的是复用线程而不是IO连接目的是让少量线程能够处理多个IO连接和读写 多路复用有两个会阻塞的阶段第一阶段阻塞在select、epoll等系统调用第二阶段阻塞在数据拷贝 多路复用首先是同步IO但是阻塞还是非阻塞不同文章说法不一如果从第一阶段是否卡住死等数据就绪来看是阻塞IO。 注意区分系统调用如select、epoll的阻塞和socket本身的阻塞一般来说使用select、epoll是需要将socket设置为非阻塞的因为有时返回socket可读但执行recv时发现并没数据如果阻塞就会卡住再者避免由于一个FD的阻塞读/阻塞写操作把处理多个文件描述符的任务饿死。参考使用epoll时需要将socket设为非阻塞吗-腾讯云开发者社区-腾讯云 三区分原生Socket的非阻塞和NIO 原生Socket在创建的时候也可以指定为阻塞或非阻塞模式区别只在第一个等待数据的阶段第二个阶段调用recv拷贝数据都是一样的。原生非阻塞Socket编程较复杂比如可能需要循环判断send和recv的数据量是否完整故一般不会轻易挑战。 原生Socket也是可以编程实现多路复用的参考SOCKET编程与复用 | YuYoungs Blog NIO底层实现也是操作的原生Socket可以看作是对以上两点的包装对使用者更友好。 点关注不迷路有缘再见