首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

同步 IO 异步 IO

linux 中对 io 操作就是把内核态准备就绪的数据拷贝到用户态。 啥是内核态呢,内核态就是 linux 内核,用户态则是用户进程中的某个线程,即 io 操作其实就是内核态用户态的切换。...io 操作大致分为两种: 文件 io 网络 io io 操作分为两步 发起 io 请求 接收处理 io 同步 io 异步 io 最大的区别就是同步 io 的发起方(用户线程)会阻塞或轮询等待 io 完成...同步 io 的特点 1、同步 io 是用户线程发起 io 请求并以阻塞或轮询的方式来等待 io 的完成 2、同步 ioio 的发起方,同时也是处理方 3、同步 io 是需要将内核态准备就绪的数据拷贝到用户态...,处理 io 拷贝数据均由内核态完成。...总结以上几种 io 模型,除了最后一个是异步 io 模型,其它的 io 模型都是同步

1.4K30

理解一下5种IO模型、阻塞IO非阻塞IO同步IO异步IO

5种IO模型、阻塞IO非阻塞IO同步IO异步IO 看了一些文章,发现有很多不同的理解,可能是因为大家入切的角度、环境不一样。所以,我们先说明基本的IO操作及环境。...2、5种IO模型 《UNIX网络编程》说得很清楚,5种IO模型分别是阻塞IO模型、非阻塞IO模型、IO复用模型、信号驱动的IO模型、异步IO模型;前4种为同步IO操作,只有异步IO模型是异步IO操作。...3-2、同步IO异步IO 同步IO:导致请求进程阻塞,直到I/O操作完成。 异步IO:不导致请求进程阻塞。 上面两个定义是《UNIX网络编程 卷1:套接字联网API》给出的。...这不是很好理解,我们来扩展一下,先说说同步异步同步异步关注的是双方的消息通信机制: 同步:双方的动作是经过双方协调的,步调一致的。 异步:双方并不需要协调,都可以随意进行各自的操作。...这里我们的双方是指,用户进程IO设备;明确同步异步之后,我们在上面网络输入操作例子的基础上,进行扩展定义: 同步IO:用户进程发出IO调用,去获取IO设备数据,双方的数据要经过内核缓冲区同步,完全准备好后

33.5K71
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Windows内核原理-同步IO异步IO

    目的 本片文章主要讲解同步I/O与异步I/O相关知识,希望通过编写本篇文章为起点,对windows内核原理知识进行学习与梳理。发现并弥补遗漏的知识点并加以学习。...在通过异步I/O将I/O请求添加到队列之前,会将设备内核对象设置为未触发,此时就可以使用该设备内核对象进行同步操作,当I/O请求完成后则会将设备内核对象设置为触发状态。...此使我们发出的I/O请求时,系统内核返回IO_PENDDING状态,然后线程就可以继续处理其他事情。...使用异步I/O时线程不会阻塞,系统底层将每个I/O请求生成I/O请求包(IRP)加入到设备驱动程序的请求队列中,然后直接返回IO_PENDDING状态表示请求受理成功,当底层设备完成了真实的I/O请求后会通过中断控制器通过中断操作通知...使用异步I/O完成端口实现高性能I/O操作的主要原因有三点。

    1.8K10

    同步IO异步IO、阻塞IO、非阻塞IO之间的联系与区别

    POSIX 同步IO异步IO、阻塞IO、非阻塞IO,这几个词常见于各种各样的与网络相关的文章之中,往往不同上下文中它们的意思是不一样的,以致于我在很长一段时间对此感到困惑,所以想写一篇文章整理一下。...POSIX(可移植操作系统接口)把同步IO操作定义为导致进程阻塞直到IO完成的操作,反之则是异步IO 按POSIX的描述似乎把同步阻塞划等号,异步非阻塞划等号,但是为什么有的人说同步IO不等于阻塞IO...IO模型 这里统一使用Linux下的系统调用recv作为例子,它用于从套接字上接收一个消息,因为是一个系统调用,所以调用时会从用户进程空间切换到内核空间运行一段时间再切换回来。...),如果按这样理解,这种IO模型也能称之为非阻塞IO模型,但是按POSIX来看,它也是同步IO,那么也楼上一样称之为同步非阻塞IO吧。...是不是很像异步IO?很遗憾,它还是同步IO(省不了装水的时间啊)。 ? 异步IO模型 调用aio_read,让内核等数据准备好,并且复制到用户进程空间后执行事先指定好的函数。

    1.4K20

    Java 非阻塞 IO 异步 IO

    本文将介绍非阻塞 IO 异步 IO,也就是大家耳熟能详的 NIO AIO。很多初学者可能分不清楚异步非阻塞的区别,只是在各种场合能听到异步非阻塞这个词。...希望看完本文,读者可以对非阻塞 IO 异步 IO 的迷雾看得更清晰些,或者为初学者解开一丝丝疑惑也是好的。...NIO.2 异步 IO More New IO,或称 NIO.2,随 JDK 1.7 发布,包括了引入异步 IO 接口 Paths 等文件访问接口。...在 Linux 中其实也是有异步 IO 系统实现的,但是限制比较多,性能也一般,所以 JDK 采用了自建线程池的方式。...小结 我想,本文应该是说清楚了非阻塞 IO 异步 IO 了,对于异步 IO,由于网上的资料比较少,所以不免篇幅多了些。

    1.3K90

    Java 非阻塞 IO 异步 IO

    本文将介绍非阻塞 IO 异步 IO,也就是大家耳熟能详的 NIO AIO。很多初学者可能分不清楚异步非阻塞的区别,只是在各种场合能听到异步非阻塞这个词。...希望看完本文,读者可以对非阻塞 IO 异步 IO 的迷雾看得更清晰些,或者为初学者解开一丝丝疑惑也是好的。...NIO.2 异步 IO More New IO,或称 NIO.2,随 JDK 1.7 发布,包括了引入异步 IO 接口 Paths 等文件访问接口。...在 Linux 中其实也是有异步 IO 系统实现的,但是限制比较多,性能也一般,所以 JDK 采用了自建线程池的方式。...小结 我想,本文应该是说清楚了非阻塞 IO 异步 IO 了,对于异步 IO,由于网上的资料比较少,所以不免篇幅多了些。

    2.2K30

    IO-同步异步、阻塞、非阻塞

    同步异步(线程间调用) 同步异步是对应于调用者与被调用者,它们是线程之间的关系,两个线程之间要么是同步的,要么是异步同步操作时,调用者需要等待被调用者返回结果,才会进行下一步操作 而异步则相反...同步异步调用/线程/通信 同步就是两种东西通过一种机制实现步调一致,异步是两种东西不必步调一致 一、同步调用与异步调用: 在用在调用场景中,无非是对调用结果的不同处理。...三、同步通信与异步通信: 同步异步是指:发送方接收方是否协调步调一致 同步通信是指:发送方接收方通过一定机制,实现收发步调协调。...当IO操作完成以后,将完成状态结果通知接收方,接收方再响应发送方,发送方才进入下一次请求过程。(实际不应用) 异步阻塞方式: 发送方向接收方请求后,不等待响应,可以继续其他工作。...当IO操作完成以后,将完成状态结果通知接收方,接收方再响应发送方。

    1.3K31

    IO异步

    on_finish 说明:异步的特点是程序存在多个步调,即本属于同一个过程的代码可能在不同的步调上同时执行 三、协程写法实现原理 说明 在使用回调函数写异步程序时,需将本属于一个执行逻辑(处理请求a)的代码拆分成两个函数...req_aon_finish,这与同步程序的写法相差很大。...而同步程序更便于理解业务逻辑,所以我们能否用同步代码的写法来编写异步程序 初始版本 import time <span class="...req_a的编写方式很类似与<em>同步</em>代码,但是在main中调用req_a的时候却不能将其简单的视为普通函数,而是需要作为生成器对待 import</span...<em>异步</em>编程原理的最简易模型,但是,Tornado实现<em>异步</em>的机制不是线程,而是epoll,即将<em>异步</em>过程交给epoll执行并进行监视回调

    50410

    异步IO

    O.png 异步I/O 为什么要异步 I/O 在跨网络的结构下,并发已经是现代编程中的标准配备了 在浏览器中 JavaScript 执行与 UI 渲染共用一个线程 前端通过异步可以消除掉UI阻塞的现象...采用异步并发下载资源 多线程的代价在于创建 线程执行期线程上下文切换的开销较大 但是串行执行的缺点在于性能 Node在两者之间给出了它的方案 利用单线程,远离多线程死锁、状态同步等问题 利用异 步I.../O,让单线程远离阻塞,以更好地使用CPU 异步 I/O 实现现状 非阻塞I/O跟阻塞I/O的差别为调用之后会立即返回 阻塞I/O造成CPU等待浪费 非阻塞带来的麻烦却是需要轮询去确 认是否完全完成数据获取...read select poll epoll kqueue Node 的异步 I/O 事件循环 在进程启动时,Node便会创建事件循环,循环执行事件关联的回调 观察者 每个事件循环中有一个或者多个观察者...非 I/O 的异步 API 定时器 实现原理与异步I/O比较类似,只是不需要I/O线程池的参与 定时器的问题在于,它并非精确的 process.nextTick() setTimeout(fn, 0)

    87710

    关于IO同步,异步,阻塞,非阻塞

    中途正好讨论了网络IO同步异步、阻塞、非阻塞的概念,当时讲下来,大家的理解各不相同,各执己见。搜索了网络上的一些文章,观点也各不相同,甚至连wiki也将异步非阻塞当成一个概念在解释。...我看了6.2这节内容,这节内容就是讲IO模型的。刚刚提到的那篇文章,几乎就是翻译这个6.2节的。应该说,这个6.2节,对同步异步的讲解,算是很清楚的。 下面是我自己理解的重点。...将数据从内核缓冲区复制到用户进程缓冲区 同步异步的区别 那么究竟什么是同步异步的区别呢?...请重点读一下原文6.2节中的信号驱动IO异步IO中的比较。最后总结出来是: · 同步IO,需要用户进程主动将存放在内核缓冲区中的数据拷贝到用户进程中。...· 异步IO,内核会自动将数据从内核缓冲区拷贝到用户缓冲区,然后再通知用户。 这样,同步异步的概念就非常明显了。以上的五种IO模型,前面四种都是同步的,只有第五种IO模型才是异步IO

    87340

    关于IO同步,异步,阻塞,非阻塞

    中途正好讨论了网络IO同步异步、阻塞、非阻塞的概念,当时讲下来,大家的理解各不相同,各执己见。搜索了网络上的一些文章,观点也各不相同,甚至连wiki也将异步非阻塞当成一个概念在解释。...我看了6.2这节内容,这节内容就是讲IO模型的。刚刚提到的那篇文章,几乎就是翻译这个6.2节的。应该说,这个6.2节,对同步异步的讲解,算是很清楚的。 下面是我自己理解的重点。...同步异步的区别 那么究竟什么是同步异步的区别呢?...请重点读一下原文6.2节中的信号驱动IO异步IO中的比较。最后总结出来是: 同步IO,需要用户进程主动将存放在内核缓冲区中的数据拷贝到用户进程中。...异步IO,内核会自动将数据从内核缓冲区拷贝到用户缓冲区,然后再通知用户。 这样,同步异步的概念就非常明显了。以上的五种IO模型,前面四种都是同步的,只有第五种IO模型才是异步IO

    800100

    探索异步IO非阻塞IO:提升编程水平

    异步I/O 异步I/O结合了阻塞I/O非阻塞I/O的优点。异步I/O发起I/O请求后,不会阻塞程序的执行,也不需要程序不断地检查数据是否准备好,而是在数据准备好后通过回调函数或者事件来通知程序。...非阻塞I/O异步I/O的应用 非阻塞I/O异步I/O在许多地方都有应用,比如操作系统的文件操作,网络编程,数据库查询等。...在网络编程中,非阻塞I/O异步I/O可以有效地处理大量的并发连接,这就是为什么许多高性能的网络服务器,如NginxNode.js,都使用了非阻塞I/O或者异步I/O。...在Go语言中,由于其内置的Goroutinechannel机制,我们可以很方便地实现异步I/O。...当一个Goroutine等待I/O操作时,Go的运行时系统会自动将其挂起,让出CPU给其他Goroutine,从而实现了异步I/O。 结语 理解掌握非阻塞I/O异步I/O是提升编程水平的重要步骤。

    17620

    关于同步异步、阻塞非阻塞IO的摘要

    四种IO模型 Boost application performance using asynchronous I/O把同步阻塞、同步非阻塞、异步阻塞、异步非阻塞的模型讲得很清楚。...处理大量连接的问题 event-driven模型派(异步模型): Dan Kegal's C10K problem 延伸阅读:如何解决C10M问题 The Secret To 10 Million Concurrent...The reactor pattern and non-blocking IO对比了Tomcatvert.x的性能差别,不过看下来发现文章的压测方式存在偏心: 文中给Tomcat的线程少了(只给了500...另外补充:在C10M里提到kernel内核的network stack也是瓶颈。 仔细看看有些因素不就是事件驱动模型多线程模型都面临的问题吗?...对于事件驱动模型来说也有CPU用满的问题,现实中总会存在一些阻塞操作会造成CPU闲置,这也就是为什么SEDAScalable IO in Java都提到了要额外开线程来处理这些阻塞操作。

    99500
    领券