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

Java开发中同步异步、阻塞非阻塞知识总结

CPU资源 阻塞/非阻塞(描述进程的函数方法调用方式) 阻塞:IO 调用会一直阻塞,直至调用结果返回后,才能继续执行 非阻塞:IO 调用可以立即返回,并执行下一个 IO 调用 总结,同步异步和阻塞非阻塞是两个不同的概念...,用最简单的数据库查询来举一个例子: 如果发送一个请求,需要等待数据库响应,结果占用并浪费了CPU资源,这就是同步 如果发送一个请求,不需要数据库响应,可以继续处理另一个请求(NIO模式、回调通知模式)...,或者将任务插入一个队列中,主动挂起自身线程并释放CPU资源(异步队列模式),这就是异步 在第2点中,如果采用异步队列模式,会造成线程阻塞,直至获得数据库数据后,才能继续执行,这就是阻塞 在第2点中,如果采用...NIO模式、回调通知模式,则意味着数据库IO调用可以立即返回,这就是非阻塞 一般来说,同步是最简单的编程方式,而异步编程虽然需要一定的技术和工作量,但是却能提升系统性能。...对于阻塞与非阻塞,阻塞方式的实时响应性更好,但是挂起与唤醒线程的性能损耗更高,而非阻塞方式的性能、吞吐量更高,但是由于其是顺序执行每一个事件,一旦处理某一个事件过久,会直接影响后续事件的处理,因此实时响应性比较差

95120

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

中途正好讨论了网络IO的同步、异步、阻塞、非阻塞的概念,当时讲下来,大家的理解各不相同,各执己见。搜索了网络上的一些文章,观点也各不相同,甚至连wiki也将异步和非阻塞当成一个概念在解释。...虽然网络上充斥了大量关于同步、异步、阻塞、非阻塞的文章,但大都是抄来抄去,没有一个权威的说法。...请重点读一下原文6.2节中的信号驱动IO和异步IO中的比较。最后总结出来是: · 同步IO,需要用户进程主动将存放在内核缓冲区中的数据拷贝到用户进程中。...这样,同步和异步的概念就非常明显了。以上的五种IO模型,前面四种都是同步的,只有第五种IO模型才是异步的IO。 阻塞和非阻塞 那么阻塞和非阻塞呢?注意到以上五个模型。...阻塞IO,非阻塞IO,只是上面的五个模型中的两个。阻塞,非阻塞,是针对单个进程而言的。 当对多路复用IO进行调用时,比如使用poll。

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

    异步,同步,阻塞,非阻塞程序的实现

    什么是异步,同步,阻塞,非阻塞 在写这篇文章前,我对这四个概念是非常模糊的。 同步,异步 异步同步的差异,在于当线程调用函数的时候,线程获取消息的方式....同步: 线程 ----我主动来拿结果----> 函数 异步: 线程 <---你把结果拿给我---- 函数 阻塞,非阻塞 阻塞非阻塞的差异,在于线程调用函数的时候,线程的状态。...线程在同步调用下,也能非阻塞(同步轮循非阻塞函数的状态),在异步下,也能阻塞(调用一个阻塞函数,然后在函数中调用回调,虽然没有什么意义)。 下面,我会慢慢实现一个异步非阻塞的sleep。...在web项目中,这是很可怕的。所以我们需要引入非阻塞。非阻塞就是为了让一个响应的操作,不影响另一个响应。否则,当A用户在访问某个耗时巨大的网页时,B用户只能对着白板发呆。...由于my_sleep在新线程中执行,所以它不会阻塞住主线程。 在my_sleep结束时,调用回调函数。使得任务继续进行。 也就是说,在每个要处理阻塞的地方,都人为的把函数切成三个部分: 1.

    7.6K10

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

    中途正好讨论了网络IO的同步、异步、阻塞、非阻塞的概念,当时讲下来,大家的理解各不相同,各执己见。搜索了网络上的一些文章,观点也各不相同,甚至连wiki也将异步和非阻塞当成一个概念在解释。...虽然网络上充斥了大量关于同步、异步、阻塞、非阻塞的文章,但大都是抄来抄去,没有一个权威的说法。...请重点读一下原文6.2节中的信号驱动IO和异步IO中的比较。最后总结出来是: 同步IO,需要用户进程主动将存放在内核缓冲区中的数据拷贝到用户进程中。...这样,同步和异步的概念就非常明显了。以上的五种IO模型,前面四种都是同步的,只有第五种IO模型才是异步的IO。 阻塞和非阻塞 那么阻塞和非阻塞呢?注意到以上五个模型。...阻塞IO,非阻塞IO,只是上面的五个模型中的两个。阻塞,非阻塞,是针对单个进程而言的。 当对多路复用IO进行调用时,比如使用poll。

    805100

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

    四种IO模型 Boost application performance using asynchronous I/O把同步阻塞、同步非阻塞、异步阻塞、异步非阻塞的模型讲得很清楚。...有人对于event-driven模型有一些批判,认为多线程模型(同步阻塞模型)不比事件模型差: Thousands of Threads and Blocking I/O,讲了C10K提到的多线程模型的性能瓶颈在如今的内核里已经不存在了...Note that this is not the typical Web experience; rather, as load increases, throughput decreases and...事件驱动模型解决的是C10K问题,注意C是Connection,解决的是用更少的硬件资源处理更多的连接的问题,它不解决让请求更快速的问题(这是程序员/算法的问题)。...对于事件驱动模型来说也有CPU用满的问题,现实中总会存在一些阻塞操作会造成CPU闲置,这也就是为什么SEDA和Scalable IO in Java都提到了要额外开线程来处理这些阻塞操作。

    1K00

    总是搞不懂的同步异步,阻塞非阻塞

    摘要:更好的理解同步/异步,阻塞/非阻塞的概念和机制。 一、同步与异步 同步/异步, 它们是消息的通知机制。...如:在同步机制中获取文件,在文件内容返回之前,后续代码无法执行,只有等待。 异步 异步的概念和同步相对。 当一个异步过程调用发出后,调用者不会立刻得到结果。...3、在实际的程序中 同步消息通知机制 好比简单的 read/write 操作,它们需要等待这两个操作成功才能返回; 同步, 是由处理消息者自己去等待消息是否被触发。...表现在程序中,也就是该程序一直阻塞在该函数调用处不能继续往下执行, 相反,在等待的时候我们可以磨磨枪,埋埋雷,,这样的状态就是非阻塞的,因为他(等待者)没有阻塞在这个消息通知上,而是一边做自己的事情一边等待...可见,同步/异步与阻塞/非阻塞是两组不同的概念,它们可以共存组合,而很多人之所以把同步和阻塞混淆,我想也是因为没有区分这两个概念,比如阻塞的 read/write 操作中,其实是把消息通知和处理消息结合在了一起

    88710

    阻塞和非阻塞、同步和异步的讲解

    为了后续的理解,首先搞清楚一个有无数讲解却又令人费解的概念:阻塞和非阻塞、同步和异步。首先需要搞清楚的一件事,就是对于 Linux 系统, I/O 操作不是一步完成的。...调用进程(线程)阻塞在 I/O 操作请求处,直到 I/O 操作请求完成,数据到来,最重要的是用户进程的函数在请求的过程中不会返回。...同步和异步其实就是指 I/O 操作的第二部分,也就是进行具体 I/O 操作过程中,用户进程是否等待 I/O 操作结果返回。结合前面的概念,可以看出,其实这两者存在本质的区别,它们的修饰对象是不同的。...同步和异步是指访问数据的机制,同步一般指主动请求并等待 I/O 操作完毕的方式,当数据就绪后在读写的时候必须等待,异步则指主动请求数据后便可以继续处理其它任务,随后等待 I/O,操作完毕的通知,这可以使进程在数据读写时也不阻塞...你可以自己去银行办这些事(同步),如果你工作比较忙,也可以委托银行的经理帮你办理这些事,然后告诉你结果(异步)。所以说只有同步的时候,才会有是否阻塞之说。

    19610

    Web框架中的ORM框架

    在 Python 实现的 Web 框架中,通过 API 接口来访问后端的视图函数,视图函数对数据库中的数据进行处理然后返回给前端。...ORM 的映射关系是通过 ORM 框架来实现的,ORM 框架是用于实现 ORM 技术的程序,ORM框架有很多,不同语言、不同 Web 框架使用的 ORM 框架是不相同的。...在 Python 的常用 Web 框架 Flask、Django 中,都已经内置了 ORM 框架,所以在使用 Flask 和 Django 等框架开发时,默认就已经有 ORM 框架可以使用了。...当调用模型类对象的方法时,ORM 框架会帮我们生成对应的 SQL 语句,然后对数据库进行增删改查操作。对数据库进行操作后,ORM 框架会将修改后的数据映射到模型类对象的属性中。...在开发过程中,通过简单的配置就可以轻松更换数据库,简单方便。 具有这些优点,所以 ORM 框架非常实用,很多编程语言的 Web 框架中都内置了 ORM 框架。 ?

    1.9K50

    怎样理解阻塞非阻塞与同步异步的区别?

    对于一个套接字上的输入操作,第一步通常涉及等待数据从网络中到达。当所有等待分组到达时,它被复制到内核中的某个缓冲区。第二步就是把数据从内核缓冲区复制到应用程序缓冲区。...好,下面我们以阻塞套接字的recvfrom的的调用图来说明阻塞 标红的这部分过程就是阻塞,直到阻塞结束recvfrom才能返回。...其实前四种I/O模型都是同步I/O操作,他们的区别在于第一阶段,而他们的第二阶段是一样的:在数据从内核复制到应用缓冲区期间(用户空间),进程阻塞于recvfrom调用。...再看POSIX对这两个术语的定义: 同步I/O操作:导致请求进程阻塞,直到I/O操作完成; 异步I/O操作:不导致请求进程阻塞。...好,下面我用我的语言来总结一下阻塞,非阻塞,同步,异步 阻塞,非阻塞:进程/线程要访问的数据是否就绪,进程/线程是否需要等待; 同步,异步:访问数据的方式,同步需要主动读写数据,在读写数据的过程中还是会阻塞

    42420

    对于同步、异步、阻塞、非阻塞的几点浅薄理

    2.拓展两者在实际程序中的异同:  在实际的程序中, 同步消息通知机制:就好比简单的read/write 操作,它们需要等待这两个操作成功才能返回;                   同步, 是由处理消息者自己去等待消息是否被触发...等待者除了等待消息之外不能做其它的事情,那么该机制就是阻塞的,   表现在程序中,也就是该程序一直阻塞在该函数调用处不能继续往下执行. ....可见,同步/异步与阻塞/非阻塞是两组不同的概念,它们可以共存组合, 而很多人之所以把同步和阻塞混淆,我想也是因为没有区分这两个概念, 比如阻塞的read/write 操作中,其实是把消息通知和处理消息结合在了一起...四、同步/异步与阻塞/非阻塞的组合分析 _______阻塞____________________非阻塞_____ 同步 | 同步阻塞              同步非阻塞 异步 | 异步阻塞              ...实际程序中   就是未对fd 设置O_NONBLOCK 标志位的read/write 操作, 异步阻塞形式:   如果在银行等待办理业务的人采用的是异步的方式去等待消息被触发,也就是领了一张小纸条,

    56820

    如何给女朋友解释什么是IO中的阻塞、非阻塞、同步、异步?

    漫画上传,你希望是同步的还是异步的啊? ? 啥同步异步的我不懂,同步吧。 ? 哦,那是阻塞的还是非阻塞的呢? ? 额、阻塞吧。 ? 恭喜你,选择了一种最慢的方式。 ?...阻塞、非阻塞说的是调用者,同步、异步说的是被调用者。 有人认为阻塞和同步是一回事儿,非阻塞和异步是一回事。但是这是不对的。 先来看同步场景中是如何包含阻塞和非阻塞情况的。 我们是用传统的水壶烧水。...再来看异步场景中是如何包含阻塞和非阻塞情况的。 我们是用带有提醒功能的水壶烧水。在水烧发出提醒之前我们一直做在水壶前面,等着水开。这就是阻塞的。 我们是用带有提醒功能的水壶烧水。...Java中的三种IO模型 在Java语言中,一共提供了三种IO模型,分别是阻塞IO(BIO)、非阻塞IO(NIO)、异步IO(AIO)。...嗯,这就是Java中的三种IO模型。 ? Java好厉害啊,自己都能实现这些IO组合。 ? 也不是啦,Java中的IO还是借助操作系统的IO模型的,只不过是对操作系统IO模型的封装而已啦。 ?

    94931

    阻塞式非阻塞式与同步异步的区别

    阻塞式IO/非阻塞IO 阻塞式IO(blocking-IO) 默认情况下,所有的套接字socket连接都是阻塞式的,在和操作系统交互的过程之中。...只有再次向kernal发起同样的请求这时候(这个过程因为每次请求会立即得到返回,所以对于客户端来说并不是非阻塞的或者说锁定的,客户端可以在这个过程中做其他事情),看看kernal有没有准备好,若是准备好了那么则将数据从系统空间拷贝到用户内存当中去...(这个阶段是阻塞的)。...,user application和kernal application,同步IO每次IO请求都是由user主动发起,被动的等待kernal的返回结果,当获悉kernal明确的处理状态之后才可以进行后续操作...可以看出来同步和异步的区别就是在于,客户端请求完成之后到kernal的IO operation完成这个过程中客户端是不是阻塞或者锁定状态,如果是则是同步,否则则是异步。 比较:

    18910

    通俗的理解阻塞非阻塞和同步异步的概念

    阻塞     阻塞模式上12306买票,还未出票,不干别的事,一直刷,一直刷,.... ,直到出票为止。即:不知疲倦的干某件事情。 2....非阻塞    非阻塞模式上12306买票,还未出票,出去逗逗猫,回来刷一下,再出去逗逗狗,再回来刷一下, ... 。即:吊儿郎当的干某件事情。 3....同步     同步模式上12306买票,还未出票, 启动抢票软件,眼睛盯着抢票软件,一直等到出票。即:主动等待某个事件发生。 4....异步     同步模式上12306买票,还未出票,启动抢票软件,即可以离开电脑了哄孩子去了,有票时,抢票软件会主动短信通知你。即:某个事件发生后,会被动收到通知。 5....小结  两组的区别是: 是否有事件通知机制。

    83760

    Netty系列(六):阻塞非阻塞、同步异步的区别

    操作系统内核负责保存进程 P0P_0P0​ 在 CPU 中的上下文(程序计数器, 寄存器)到 PCB0PCB_0PCB0​ ——操作系统分配给进程的一个内存块中。...消息的传递有可能是阻塞的或非阻塞的 —— 也被称为同步或异步的: 阻塞式发送(blocking send). 发送方进程会被一直阻塞, 直到消息被接受方进程收到。...上述不同类型的发送方式和不同类型的接收方式,可以自由组合。 从进程通讯上来看,阻塞或非阻塞 以及 同步或异步是近义词。...同步:即阻塞发送,发送方A调用 send() 方法与接收方B通信,由于是同步的,那么在发送方A进程所对应的系统内核空间中,内核缓冲区的数据没发送出去之前,发送方A进程都是一直等待的 异步:即非阻塞发送,...A给接收方B要发送消息,接收方B调用receive()方法,如果内核缓冲区中没有数据或者没有到达指定大小的数据,那么接收方B进程就会一直阻塞,直到符合满足返回数据的条件 非阻塞:针对的是接受方,如果发送方

    34810

    漫话:如何给女朋友解释什么是IO中的阻塞、非阻塞、同步、异步?

    漫画上传,你希望是同步的还是异步的啊? ? 啥同步异步的我不懂,同步吧。 ? 哦,那是阻塞的还是非阻塞的呢? ? 额、阻塞吧。 ? 恭喜你,选择了一种最慢的方式。 ?...阻塞、非阻塞说的是调用者,同步、异步说的是被调用者。 有人认为阻塞和同步是一回事儿,非阻塞和异步是一回事。但是这是不对的。 先来看同步场景中是如何包含阻塞和非阻塞情况的。 我们是用传统的水壶烧水。...再来看异步场景中是如何包含阻塞和非阻塞情况的。 我们是用带有提醒功能的水壶烧水。在水烧发出提醒之前我们一直做在水壶前面,等着水开。这就是阻塞的。 我们是用带有提醒功能的水壶烧水。...Java中的三种IO模型 在Java语言中,一共提供了三种IO模型,分别是阻塞IO(BIO)、非阻塞IO(NIO)、异步IO(AIO)。...嗯,这就是Java中的三种IO模型。 ? Java好厉害啊,自己都能实现这些IO组合。 ? 也不是啦,Java中的IO还是借助操作系统的IO模型的,只不过是对操作系统IO模型的封装而已啦。 ?

    85340

    深入讨论阻塞与非阻塞、同步与异步的区别

    而我只需要调用某个函数告诉xxx来帮我做(然后我再干其他的事情) 同步:某个事情需要10s完成,我需要一直等它完成(等10s),再能继续后面的工作。...阻塞:做某件事情,直到完成,除非超时 非阻塞:尝试做,如果不能做,就不做(直接返回),如果能做,就做。 前两者和后两者不容易区分,不过前两者更多的有涉及到多线程交互(消息)的场景。...(同步阻塞) 小李感觉这样太费时间。 2、小李把水壶放到炉子上,去客厅看电视,时不时去厨房看看水开没有。(同步非阻塞) 小李还是觉得自己这样太累,于是买了把会响笛的那种水壶。水开之后,能发出声音。...三、深入理解 阻塞就是 recv/read的时候 socket接收缓冲区要是有数据就读, 没数据我就一直睡觉赖着不走,直到有数据来了读完我才走。...这样当配合非阻塞的socket使用时,只有当系统通知我哪个描述符可读了,我才去执行read操作,可以保证每次read都能读到有效数据而不做纯返回-1和EAGAIN的无用功。写操作类似。

    34520

    那些年让人迷惑的同步、异步、阻塞、非阻塞

    5、异步I/O 上面的三种I/O解决方案中,小进都被阻塞了,只不过是阻塞时间长短不一样,第一种方案中小进被阻塞的时间长一些,在内核接收数据以及将数据复制到小进的用户空间时,都被阻塞。...第二、第三种方案中,只在内核将数据从内核空间复制到小进的用户空间时,小进才被阻塞。 我们现在说的异步I/O,目的就是让小进绝对不被阻塞。...一直到内核接收到数据并将数据从内核空间复制到小进的用户空间后,内核才给小进发送信号。小进在信号处理函数中可以直接处理数据。 6、那啥是同步呢?...一句话,凡是让小进阻塞(不管长短)的I/O方案都是同步I/O。也就是说,阻塞、非阻塞、信号驱动式都是同步I/O。...7、无总结,不进步 上面,我们从完成输入时,进程与内核的交互方式的角度分析了不同的I/O解决方案,在这个过程中,解释清楚了阻塞、非阻塞、同步、异步的概念。

    35820

    传统同步阻塞和异步非阻塞的区别理解

    同步与异步的理解 同步与异步的重点在消息通知的方式上,也就是调用结果通知的方式。 同步:当一个同步调用发出去后,调用者要一直等待调用结果的通知后,才能进行后续的执行。...同步与异步,重点在于消息通知的方式;阻塞与非阻塞,重点在于等消息时候的行为。 所以,就有了下面4种组合方式 1. 同步阻塞:小明收到信息后,啥都不干,等快递; 2....大部分程序的I/O模型都是同步阻塞的,单个进程每次只在一个文件描述符上执行I/O操作,每次I/O系统调用都会阻塞,直到完成数据传输。 传统的服务器采用的就是同步阻塞的多进程模型。...events { worker_connections 1024; use kqueue; # 在Linux中配置:use epoll; } 在一个Web服务中,延迟最多的就是等待网络传输...web server的这种性质决定了每个request的大部份时间都消耗在网络传输中,实际上花费在server机器上的时间片不多。

    1K10

    也谈应用程序级的同步、异步、阻塞、非阻塞

    ,当时上操作系统的老师说得比较模糊(阻塞==同步,非阻塞==异步),当时觉得挺对 的, 初学者一般来说很会这么认为。...阻塞,在操作系统的书中都有相关的概念,简单的说 就是线程或是进程在执行过程中暂停,以等待某个条件的触发。 同步,指的就是两个或多个以上的进程保持相互的制约,一般多用在 通信当面的词。...也就是说,“在这种模型中,配置的是非阻塞 I/O,然后使用 阻塞 select 系统调用来确定一个 I/O 描述符何时有操作。”...所以,从IO操作的实际效果来看,异步阻塞IO和第一种同步阻塞IO是一样的,应用程序都是一直等到IO操作成功之后 (数据已经被写入或者读取),才开始进行下面的工作。...总的来看的话,对于同步和异步,指的都是应用程序级的,而所谓的阻塞和非阻塞的话,指的是在内核调度进程或线程方面的。

    1K20

    重新认识同步与异步,阻塞和非阻塞的概念

    前言 在实际的开发中,我们经常会听到同步,异步,阻塞,非阻塞这些编程概念,每次遇到的时候都会蒙圈,然后就各种查网上似是而非的资料,结果越查越迷糊,大部分文章都千篇一律,没有说到本质上的区别,所以下次再碰到这些概念...下面我们来慢慢探讨他们之间的区别与联系,在这之前,我们还会经常看到下面的组合术语: (一)同步+阻塞 (二)同步+非阻塞 (三)异步+阻塞 (四)异步+非阻塞 在当什么是同步和异步,阻塞与非阻塞的概念还没弄清楚之前...如果是请求方主动发起的,一直在等待应答结果(同步阻塞),或者可以先去处理其他的事情,但要不断轮询查看发起的请求是否有应答结果(同步非阻塞 )因为不管如何都要发起方主动获取消息结果,所以形式上还是同步操作...总结 本文主要介绍了同步,异步,阻塞和非阻塞的相关概念和例子,从上面的描述中我们其实能够看到阻塞和非阻塞通常是指客户端在发出请求后,在服务端处理这个请求的过程中,客户端本身是否直接挂起等待结果,还是继续做其他的任务...从这一点来看同步和阻塞其实描述的两个不同角度的事情,阻塞和非阻塞指的一个是客户端等待消息处理时的本身的状态,是挂起还是继续干别的。

    63520
    领券