美文网首页
事件驱动与异步IO

事件驱动与异步IO

作者: 奔跑的老少年 | 来源:发表于2018-08-07 17:13 被阅读0次

IO模式:对于一次IO操作,数据会先被拷贝到操作系统内核缓冲区,然后从操作系统内核缓冲区再拷贝到应用程序内存空间。当一个IO操作发生时会发生两个阶段:1、等待数据准备,2、将数据从内核拷贝到进程中。因为这两个阶段Linux系统产生了五种网络模式方案:
1、阻塞IO:在数据准备阶段,用户进程会被阻塞,一直等到数据的到来。知道数据到来并被拷贝到用户内存后该阻塞才会解除
2、非阻塞IO:数据还未准备好的时候会立刻返回error,用户进程收到error时就知道数据还未准备好,于是可再次发起改操作。当数据准备好后就马上拷贝到用户内存并返回结果
3、IO多路复用:多路IO复用有三种模式select、poll、epoil,有些地方也称这种模式为事件驱动IO。select、epoil的好处在于单个进程就可以同时处理多个网络链接的IO.它的基本原理是select、poll、epoil这个方法会不断的轮询所负责的所有socket,当某个socket有数据到达了就通知用户进程。当用户进程调用了select,进程就会阻塞,同时kemel会监听所有select负责的socket,当任何一个socket的数据准备好了,select就会返回,这个时候用户再调用时间操作将数据从kemel拷贝到用户进程。IO多路复用的特点是通过一种机制一个进程能同时访问多个文件描述符,而这些文件描述符中的其中任意一个进入就绪状态,select函数就可以返回
4、信号驱动IO
5、异步IO:当用户发起一个操作后就立即去做其他事情了,内核会等待、检测数据直到数据准备完成,然后将数据拷贝到用户内存(无需先拷贝到内核缓冲区),这一切完成后会给用户进程发送一个信号告知操作完成了
阻塞IO、非阻塞IO、多路复用IO都是同步IO,都需等待将数据从内核缓冲区拷贝到用户内存,会阻塞进程。异步IO是异步IO

事件驱动模型:当有一个事件(如鼠标点击)发生时,会将该事件放入一个消息队列,不断循环处理队列中的事件,遵循先进先出的原则,该事件中包含其处理函数的指针,所以可根据事件调用其对应的处理函数。
常见的编程范式:单线程、多线程、事件驱动编程

相关文章

  • 事件驱动与异步IO

    IO模式:对于一次IO操作,数据会先被拷贝到操作系统内核缓冲区,然后从操作系统内核缓冲区再拷贝到应用程序内存空间。...

  • 论事件驱动与异步IO

    title: 论事件驱动与异步IOtag: 事件驱动 异步IOcategories: notes 转载自人云思云 ...

  • 整理一些遇到的问题

    常见的IO模型 单线程阻塞 多线程阻塞 多进程阻塞 非阻塞轮询 事件驱动IO 信号驱动式IO 异步IO(指的是使用...

  • netty 入门杂谈

    java io 模型一共分为4种 传统IO 伪异步IO NIO AIO 介绍 netty是一个高性能,异步事件驱动...

  • Java8并发编程(使用CompletableFuture)

    java8异步处理 非阻塞IO/异步/并行 使用场景 scala事件驱动 Java CompletableFutu...

  • netty

    netty 高性能,异步,事件驱动库 Unix io模型 阻塞io 非阻塞io,netty主要就是基于epoll的...

  • 初识node

    Node 基础 浏览器工作原理(Node优势):事件驱动(事件轮询)和非阻塞IO处理(异步IO)传统服务器是同步I...

  • nodejs深入学(5)异步编程

    前言 上一章讲解了node如何通过事件循环实现异步,包括与各种IO多路复用搭配实现的异步IO已经与IO无关的异步A...

  • 02.NodeJs基本语法

    一.认识NodeJs 1.NodeJs的事件驱动和异步IO 缺点: 2.npm介绍: ​ 是nodejs自带的...

  • Netty框架分析

    Netty框架分析 Netty简介 Netty[https://netty.io/] 是一个广受欢迎的异步事件驱动...

网友评论

      本文标题:事件驱动与异步IO

      本文链接:https://www.haomeiwen.com/subject/iiryvftx.html