当前位置: 首页 > news >正文

山西建设公司网站小程序模板代理

山西建设公司网站,小程序模板代理,青岛大型网站设计公司,网络推广怎么做最有效同步 IO 与异步 IO 同步 IO 和异步 IO 是关于数据读写方式的两种不同模式。 同步 IO 是指在程序读写数据时#xff0c;需要等待操作完成后才能继续执行后面的程序。这种模式下#xff0c;当程序使用阻塞式 IO 时#xff0c;会一直等待IO操作完成#xff0c;程序会暂停执行…同步 IO 与异步 IO 同步 IO 和异步 IO 是关于数据读写方式的两种不同模式。 同步 IO 是指在程序读写数据时需要等待操作完成后才能继续执行后面的程序。这种模式下当程序使用阻塞式 IO 时会一直等待IO操作完成程序会暂停执行直至IO操作完成这样会导致程序的执行效率降低。同步 IO 主要用于小型程序如批处理作业简单计算和查询程序等。 同步IO的特点 1.同步IO指的是用户进程触发I/O操作并等待或者轮询的去查看I/O操作是否就绪。 2.同步IO的执行者是IO操作的发起者。 3.同步IO需要发起者进行内核态到用户态的数据拷贝过程所以这里必须阻塞。 异步 IO 是指在进行数据读写操作时程序无需等待 IO 操作完成。异步 IO 使得程序可以在 IO 操作的同时执行其他操作提高了程序的执行效率。异步 IO 主要用于高并发场景如 Web 服务器、数据库访问等。 异步IO的特点 1.异步IO是指用户进程触发I/O操作以后就立即返回继续开始做自己的事情而当I/O操作已经完成的时候会得到I/O完成的通知。 2.异步IO的执行者是内核线程内核线程将数据从内核态拷贝到用户态所以这里没有阻塞。 五种网络IO模式 对于一次IO访问以read为例数据会先被拷贝到操作系统内核的缓冲区中然后才会从操作系统内核的缓冲区拷贝到应用程序的地址空间。所以说当一个read操作发生时会经历两个阶段 1、等待数据准备 2、将数据从内核拷贝到进程中 linux系统产生了下面五种网络模式的方案 1、阻塞IOblocking IO 2、非阻塞IOnonblocking IO 3、IO多路复用IO multiplexing 4、信号驱动IOsignal driven IO不常用 5、异步IO asynchronous IO 阻塞 IO 阻塞当某个事件或者任务在执行过程中它发出一个请求操作但是由于该请求操作需要的条件不满足那么就会一直在那等待直至条件满足 同步和异步着重点在于多个任务的执行过程中一个任务的执行是否会导致整个流程的暂时等待 而阻塞和非阻塞着重点在于发出一个请求操作时如果进行操作的条件不满足是否会返会一个标志信息告知条件不满足。 在linux 中默认情况下所有的 socket 都是 blocking IO, 一个典型的读操作流程 非阻塞 IO 非阻塞当某个事件或者任务在执行过程中它发出一个请求操作如果该请求操作需要的条件不满足会立即返回一个标志信息告知条件不满足不会一直在那等待。 阻塞和非阻塞的区别关键在于当发出请求一个操作时如果条件不满足是会一直等待还是返回一个标志信息。 当用户线程发起一个 read 操作后并不需要等待而是马上就得到了一个结果。如果结果是一个error时它就知道数据还没有准备好于是它可以再次发送 read 操作。一旦内核中的数据准备好了并且又再次收到了用户线程的请求那么它马上就将数据拷贝到了用户线程然后返回。 所以事实上在非阻塞IO模型中用户线程需要不断地询问内核数据是否就绪也就说非阻塞IO不会交出CPU而会一直占用CPU。 设置非阻塞常用方式 方式一: 创建socket 时指定 int s socket(AF_INET, SOCK_STREAM | SOCK_NONBLOCK, IPPROTO_TCP);方式二: 在使用前通过如下方式设定 fcntl(sockfd, F_SETFL, fcntl(sockfd, F_GETFL, 0) | O_NONBLOCK);IO 多路复用 在多路复用 IO 模型中会有一个线程不断去轮询多个 socket 的状态只有当 socket 真正有读写事件时才真正调用实际的 IO 读写操作。因为在多路复用IO模型中只需要使用一个线程就可以管理多个 socket系统不需要建立新的进程或者线程也不必维护这些线程和进程并且只有在真正有socket读写事件进行时才会使用 IO 资源所以它大大减少了资源占用。 多路复用IO为何比非阻塞IO模型的效率高 是因为在非阻塞 IO 中不断地询问 socket 状态是通过用户线程去进行的而在多路复用 IO 中轮询每个 socket 状态是内核在进行的这个效率要比用户线程要高的多。 不过要注意的是多路复用IO模型是通过轮询的方式来检测是否有事件到达并且对到达的事件逐一进行响应。因此对于多路复用IO模型来说一旦事件响应体很大那么就会导致后续的事件迟迟得不到处理并且会影响新的事件轮询。 信号驱动 IO 在信号驱动 IO 模型中当用户线程发起一个 IO 请求操作会给对应的 socket 注册一个信号函数然后用户线程会继续执行当内核数据就绪时会发送一个信号给用户线程用户线程接收到信号之后便在信号函数中调用 IO 读写操作来进行实际的 IO 请求操作。 使用信号驱动 I/O 时当网络套接字可读后内核通过发送 SIGIO 信号通知应用进程于是应用可以开 始读取数据。该方式并不是异步 I/O因为实际读取数据到应用进程缓存的工作仍然是由应用自己负责的。 异步 IO 在异步IO模型中当用户线程发起 read 操作之后立刻就可以开始去做其它的事。而另一方面从内核的角度当它收到一个 asynchronous read 之后它会立刻返回说明 read 请求已经成功发起了因此不会对用户线程产生任何 block。然后内核会等待数据准备完成然后将数据拷贝到用户线程当这一切都完成之后内核会给用户线程发送一个信号告诉它 read 操作完成了。 也就说用户线程完全不需要知道实际的整个IO操作是如何进行的只需要先发起一个请求当接收内核返回的成功信号时表示IO操作已经完成可以直接去使用数据了。 也就说在异步IO模型中IO操作的两个阶段都不会阻塞用户线程这两个阶段都是由内核自动完成然后发送一个信号告知用户线程操作已完成。 前面四种IO模型实际上都属于同步IO只有最后一种是真正的异步IO因为无论是多路复用IO还是信号驱动模型IO操作的第2个阶段都会引起用户线程阻塞也就是内核进行数据拷贝的过程都会让用户线程阻塞。 https://www.cnblogs.com/xiaoxi/p/6525396.html
http://www.pierceye.com/news/515426/

相关文章:

  • 街区网站建设东阳市住房和城乡建设局网站
  • 怎样建设网站是什么网站代码制作软件
  • 成华区微信网站建设计公司加盟
  • 找个男做那个视频网站好高端网站建设公司
  • 做网站 毕业设计广东手机网页制作
  • 沈阳口碑最好的男科医院seo排名优化什么意思
  • 光谷做网站推广价格手机网站 教程
  • 泉州做网站多少钱关键词排名快照优化
  • 威海网站建设费用网站不能调用样式
  • 网站链接建设及引流营销世界500强企业中国有几家
  • 哪个网站做网络推好推广引流的10个渠道
  • 上海企业一网通办沂seo网站推广
  • 资阳网站网站建设官方网站建设公司
  • 企业网站建设一条龙服务内容如何自己免费创建网站
  • 重庆智能网站建设多少钱临海做网站
  • 创建好网站如何把浏览器合肥道路建设从哪个网站可以看到
  • 湖北省和建设厅网站自助建站模板
  • 西安网站建设 美科动seo关键词优化哪个平台好
  • 副食店年报在哪个网站做mc建筑网站
  • 网站建设不足之处2017网站设计尺寸
  • 网站架构招聘怎么免费的安装wordpress主题
  • 海天建设集团网站深圳西乡地铁站
  • 上海html5网站建设第九影院用wordpress版权信息
  • 东莞网站建设运营方案尺寸在线做图网站
  • 萍乡网站推广陕西省住房和城乡建设厅网站上查询
  • 南京市浦口区建设局网站多商户商城app开发
  • 网站设置不能通过链接访问中专网站建设与管理就业前景
  • 大连网站建设哪个公司好郑州最新通告
  • 如何自己搭建网站做装修的业务网站
  • app网站的优点手机自助建站永久免费