区分同步或异步(synchronous/asynchronous) 简单来说,同步是一种可靠的有序运行机制,当我们进行同步操作时,后续的任务是等待当前调用返回,才会进行下一步;而异步则相反,其他任务不需要等待当前调用返回...区分阻塞与非阻塞(blocking/non-blocking) 在进行阻塞操作时,当前线程会处于阻塞状态,无法从事其他任务,只有当条件就绪才能继续,比如 ServerSocket 新连接建立完毕,或数据读取...、写入操作完成;而非阻塞则是不管 IO 操作是否结束,直接返回,相应操作在后台继续处理。
1.2对应技术的问题: 我所选择的排队方式就对应同步与异步。在队伍中等待就是同步,取号等待就是异步。 ...2.同步、异步、阻塞、非阻塞的理解 2.1同步阻塞I/O 官方解释:用户空间的应用程序执行一个系统调用时,会导致应用程序阻塞。...2.3异步阻塞I/O 官方解释:另外一个阻塞解决方案是带有阻塞通知的非阻塞 I/O。...2.4 异步非阻塞I/O(AIO) 官方解释:异步非阻塞 I/O 模型是一种处理与 I/O 重叠进行的模型。读请求会立即返回,说明 read 请求已经成功发起了。...3.总结 同步与异步是一组相对概念,针对的是自己等待还是别人通知 阻塞和非阻塞是一组相对概念,针对的是等待过程中,等待者的操作。
同步与异步 同步和异步关注的是消息通信机制。同步就是在发出一个【调用】时,在没有拿到结果之前,该【调用】就不返回,但是一旦调用返回,就得到返回值了。 ...异步:执行一个操作之后,可以去执行其他操作,然后等待通知再回来执行刚才没执行完的操作。 1. 阻塞与非阻塞 阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态。 ...阻塞调用是指调用结果返回之前,当前线程会被挂起,调用线程只有在得到结果之后才会返回。 非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。 ...阻塞与非阻塞与是否同步异步无关。 总结: 阻塞:进程给CPU传达一个任务之后,一直在等待CPU处理完成,然后才执行后边的操作。 ...非阻塞:进程给CPU传达一个任务之后,继续处理后续的操作,隔段时间再来询问之前的操作是否完成,这样的机制也叫轮询。
| 导语 同步异步与阻塞非阻塞是开发中经常碰到的概念,但是很多人都没理解清楚,或者混淆了它们的概念。最近看了一些材料,发现以前很多理解都是错的,所以重新整理了一下。...同步异步与阻塞非阻塞 标题有点简单粗暴,直接用了本文要介绍的几个概念。本来想取个高大上一点的标题,但是感觉主题不那么明了。 好,废话不多说,进入正题。...IO多路复用模型是异步IO。 第一个表达,“非阻塞IO模型是异步IO” 的说法是错误的,在UNP一书中有介绍,那么“非阻塞IO模型是同步IO模型”正确么?...IO 操作 关于IO操作, 首先说下阻塞与非阻塞的概念: IO操作的完成往往是需要一定条件的,比如等待可读、可写的,也就是说IO操作很可能是没办法立即完成的。...总结 前面根据概念的的讨论范围,分别介绍了与同步、异步、阻塞、非阻塞等相关的概念。其实他们也是有共通点的。 同步和异步关注的是消息的通信机制。
通常,同步操作是阻塞的,而异步操作非阻塞,但两对概念也可以交叉组合。 同步与异步是基于消息和通信的概念。...异步操作立即返回,操作完成后通知,而同步操作等待操作完成才返回(返回就相当于完成通知,也意味着没有通知)。 阻塞与非阻塞的最大区别在于,执行操作后资源是否可用(当然是否阻塞也是他们的区别)。...阻塞操作执行后资源可用,非阻塞操作执行后则不一定可用。 例如同步非阻塞,执行语句后就可以做别的,但是资源不可用,没有完成通知,因此需要轮询。...异步阻塞,执行语句后不能做别的,执行下一条语句时资源已经可用了,有完成通知(异步阻塞和同步阻塞只差一个通知,基本没有区别)。
在讲 BIO,NIO,AIO 之前,先来回顾一下这样几个概念:同步与异步,阻塞与非阻塞。...同步与异步 同步: 同步就是发起一个调用后,被调用者未处理完请求之前,调用不返回; 异步: 异步就是发起一个调用后,立刻得到被调用者的回应,表示已接收到请求,但是被调用者并没有返回结果,此时我们可以处理其他的请求...阻塞和非阻塞 阻塞: 阻塞就是发起一个请求,调用者一直等待请求结果返回,也就是当前线程会被挂起,无法从事其他任务,只有当条件就绪时才能继续; 非阻塞: 非阻塞就是发起一个请求,调用者不用一直等着结果返回...举个生活中简单的例子: 你妈妈让你烧水,小时候你比较笨啊,在那里傻等着水开(同步阻塞); 等你稍微长大了,你知道每次烧水的空隙可以去干点其他事,然后只需要时不时来看看水开了没有(同步非阻塞); 再后来...,你们家用上了水开了会发出声音的壶,这样你只需要听到响声后,就知道水开了,在这期间你可以随便干自己的事情,最后才需要去倒水了(异步非阻塞)。
同步与异步 同步与异步是针对应用程序与内核的交互而言的。同步过程中进程触发IO操作并等待或者轮询的去查看IO操作是否完成。...阻塞与非阻塞 应用进程请求I/O操作时,如果数据未准备好,如果请求立即返回就是非阻塞,不立即返回就是阻塞。简单说就是做一件事如果不能立即获得返回,需要等待,就是阻塞,否则就可以理解为非阻塞。...非阻塞 非阻塞和阻塞的概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。...同步/异步与阻塞/非阻塞的组合 同步阻塞形式: 等待执行结果是一直等待,执行时线程挂起(未对fd 设置O_NONBLOCK 标志位的read/write 操作) 同步非阻塞形式:等待执行结果是一直等待,...异步非阻塞形式:在处理消息是不等待,在执行消息是也不等待。
以调用函数为例, 同步指的是调用方主动查询返回结果,异步是等待被调用方通知查询结果 阻塞是等待返回结果的时间内挂起,非阻塞是等待返回结果的时间内可以干其他事情....同步和阻塞完全不是一件事,是否同步指的是获取返回结果的方式,是否阻塞指的是等待获取结果的时间内是否可以干其他事情
同步/异步与阻塞/非阻塞的区别 同步与异步:针对数据访问的方式,程序是主动去询问操作系统数据准备好了么,还是操作系统在数据准备好的时候通知程序。...阻塞与非阻塞:针对函数(程序)运行的方式,在IO未就绪时,是等待就绪还是直接返回(执行别的操作)。...非阻塞与异步的区别: 非阻塞可以通过轮询或者信号/事件机制来实现,其目的是由内核通知我们何时可以启动一个I/O操作 而异步I/O模型是在内核IO完成后,由内核通知我们I/O操作已经完成。...框架若使用异步IO,则通常需要应用程序内核之间是非阻塞的。一旦内核应用程序数据IO完成,则执行回调函数,执行一定的操作。 参考文章: 怎样理解阻塞非阻塞与同步异步的区别?...IO多路复用,同步,异步,阻塞和非阻塞 区别 关于异步,同步,阻塞与非阻塞 解读I/O多路复用技术
这里讲的都是基于IO的 阻塞、非阻塞、同步、异步 ---- 一个典型的IO操作包括了两个阶段,数据准备和数据读写。比如说现在要使用 recv 执行一个读操作,数据就绪就是远端是否有数据可读。...当IO工作在阻塞状态下的时候,如果数据没有就绪,recv就会阻塞当前线程;如果说IO工作在非阻塞状态下,会立即返回。...返回值-1的话,就说明连接出现问题,连接异常;如果返回值是0,且errno是EAGIN的话,就说明这是一个正常的非阻塞,返回数据未就绪状态。...一个同步IO接口的示例: char buf[1024]; int sz = recv(sockfd,buf,1024,0); //阻塞:一直在这儿死等 //非阻塞:时不时的回来问一下 if(sz>0)...---- 五种IO模型 阻塞: 非阻塞: 多路IO复用 信号驱动: 这里就完全放飞自我了 异步: ---- Reactor反应堆模型 One loop per thread
同步、异步、阻塞和非阻塞(网络编程) 同步 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。 按照这个定义,其实绝大多数函数都是同步调用(例如sin, isdigit等)。...非阻塞 非阻塞和阻塞的概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。...不过小明仍然一直等待“叮”的声音(看起来很傻,不是吗)最蠢 异步非阻塞:仍然是那个会“叮”一声的下载软件,小明提交下载任务后就去干别的,听到“叮”的一声就知道完成了。...(最机智) 也就是说,同步/异步是下载软件的通知方式,或者说 API 被调用者的通知方式。阻塞/非阻塞则是小明的等待方式,或者说 API 调用者的等待方式。...在不同的场景下,同步/异步、阻塞/非阻塞的四种组合都有应用。
一、概念理解: 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式: 同步/异步主要针对C端: 同步:所谓同步,就是在c端发出一个功能调用时...同步/异步主要针对C端, 但是跟S端不是完全没有关系,同步/异步机制必须S端配合才能实现.同步/异步是由c端自己控制,但是S端是否阻塞/非阻塞, C端完全不需要关心。...阻塞IO和非阻塞IO的区别就在于:应用程序的调用是否立即返回! 同步和异步都只针对于本机SOCKET而言的。同步和异步,阻塞和非阻塞,有些混用,其实它们完全不是一回事,而且它们修饰的对象也不相同。...I/O操作完毕的方式,当数据就绪后在读写的时候必须阻塞(区别就绪与读写二个阶段,同步的读写必须阻塞),异步则指主动请求数据后便可以继续处理其它任务,随后等待I/O,操作完毕的通知,这可以使进程在数据读写时也不阻塞...较好的做法是,使用套接字的“I/O模型”来判断非阻塞套接字是否可读可写。 非阻塞模式套接字与阻塞模式套接字相比,不容易使用。
同步/异步主要针对C端, 但是跟S端不是完全没有关系,同步/异步机制必须S端配合才能实现.同步/异步是由c端自己控制,但是S端是否阻塞/非阻塞, C端完全不需要关心. 3....同步和异步,阻塞和非阻塞,有些混用,其实它们完全不是一回事,而且它们修饰的对象也不相同。...同步一般指主动请求并等待I/O操作完毕的方式,当数据就绪后在读写的时候必须阻塞(区别就绪与读写二个阶段,同步的读写必须阻塞),异步则指主动请求数据后便可以继续处理其它任务,随后等待I/O,操作完毕的通知...较好的做法是,使用套接字的“I/O模型”来判断非阻塞套接字是否可读可写。 非阻塞模式套接字与阻塞模式套接字相比,不容易使用。...但低效也是相对的,视情况而定,也可通过良好的设计改善 同步/异步与阻塞/非阻塞经常看到是成对出现: 同步阻塞,异步非阻塞,同步非阻塞
程序员:如果必须等待A完成后才能执行B那么这个就是阻塞的,如果A,B可以同时执行那么就 是非阻塞的 面试官:那你的意思异步/同步的概念与阻塞非阻塞一样了? 程序员:嗄。。。可以这么说吧。...我觉得可以并发执行的就是异步非阻塞的。...)被调用者通过状态、通知或回调机制主动通知调用者被调用者的运行状态 阻塞/非阻塞 阻塞/非阻塞:关注调用者在等待结果返回之前所处的状态 阻塞:(blocking),指IO操作需要彻底完成后才返回到用户空间...同步体现在:等待下载完成通知; 阻塞体现在:等待下载完成通知过程中,不能做其他任务处理; 2. 非阻塞型 ? 同步非阻塞IO模型 描述: 用户线程发起IO请求时立即返回。...异步 ? 异步IO模型 描述: 异步IO与信号驱动IO最主要的区别是信号驱动IO是由内核通知何时可以进行IO操作,而异步IO则是由内核告诉我们IO操作何时完成了。
作者:huangguisu 原文出处:http://blog.csdn.net/hguisu/article/details/7453390 socket阻塞与非阻塞,同步与异步 1....非阻塞, 就是调用我(函数),我(函数)立即返回,通过select通知调用者 同步IO和异步IO的区别就在于:数据拷贝的时候进程是否阻塞!...同步和异步,阻塞和非阻塞,有些混用,其实它们完全不是一回事,而且它们修饰的对象也不相同。...,当数据就绪后在读写的时候必须阻塞(区别就绪与读写二个阶段,同步的读写必须阻塞),异步则指主动请求数据后便可以继续处理其它任务,随后等待I/O,操作完毕的通知,这可以使进程在数据读写时也不阻塞。...较好的做法是,使用套接字的“I/O模型”来判断非阻塞套接字是否可读可写。 非阻塞模式套接字与阻塞模式套接字相比,不容易使用。
同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?...而在用户进程这边,整个进程会被阻塞。当kernel一直等到数据准备好了,它就会将数据从kernel中拷贝到用户内存,然后kernel返回结果,用户进程才解除block的状态,重新运行起来。...does not cause the requesting process to be blocked; 两者的区别就在于synchronous IO做”IO operation”的时候会将process阻塞
同步和异步 同步:是用户线程发起IO请求需要等待或者轮询内核IO操作完成后才能继续执行。...异步:用户线程发起IO请求后任需要继续执行,当内核IO操作完成后会通知用户线程,或者调用用户注册的回调函数。 阻塞和非阻塞 阻塞:是指IO操作需要彻底完成后才能返回用户空间。...非阻塞:是指IO操作被调用后立即返回一个状态值,无需等待IO操作完成。 同步和异步(线程间调用) 同步和异步是对应调用者和被调用者,他们是线程之间的关系,两个线程之间要么是同步的,要么是异步的。...阻塞和非阻塞(线程内调用) 阻塞和非阻塞是对于一个线程来讲的,在任意时刻,线程要么是处于阻塞的,要么是出于非阻塞的。 阻塞和非阻塞关注的程序等待调用结果(消息,返回值)时的状态。...阻塞调用是指调用结果返回之前,当前线程会被挂起,调用线程只有在得到结果之后才会返回。 非阻塞调用是指不能立刻得到返回结果之前,该调用就不会阻塞当前线程。
阻塞和非阻塞 对于阻塞和非阻塞,其实更关心的是进程的状态,如果函数返回结果之前,主进程被挂起,也就是处于阻塞状态,那这时候整个过程是阻塞的;如果结果返回之前,主进程状态是非阻塞的,那整个过程是非阻塞。...举个例子 同步与异步: 你打电话问书店老板有没有《分布式系统》这本书,如果是同步通信机制,书店老板会说,你稍等,”我查一下”,然后开始查啊查,等查好了(可能是5秒,也可能是一天)告诉你结果(返回结果)...这时候关心的是你是否在等待结果,有没有不管这件事 阻塞与非阻塞: 你打电话问书店老板有没有《分布式系统》这本书,你如果是阻塞式调用,你会一直把自己“挂起”,直到得到这本书有没有的结果,如果是非阻塞式调用...在这里阻塞与非阻塞与是否同步异步无关。跟老板通过什么方式回答你结果无关。...这时候关心的是你是否立即有答复,你是否离开了书店 c++ socket阻塞与非阻塞代码 阻塞模式下的socket读取 int main(){ #创建和绑定socket,creat和bind函数
异步和非阻塞的概念实际上已经出现了很长一段时间。但是异步真正开始流行起来,是因为AJAX技术逐渐成为主流的web开发技术。...同步 ,异步,阻塞,非阻塞这几个概念相互之间联系紧密,很难区分。很多程序员都不知道它们之间的具体的不同。...本文就会详细讨论这个问题,希望能帮助读者更好的了解这几个概念 同步和阻塞 首先,我们先开始介绍与异步和非阻塞对立的两个概念:同步和阻塞 对于web开发者来说,理解同步的概念相对比较容易,因为HTTP协议就是一个同步的协议...这通常会造成性能的瓶颈,因为这个方法会阻塞,导致无法继续执行随后的操作。 异步和非阻塞 异步和非阻塞就是同步和阻塞的相反面。...通常来说,系统调用会进入内核,一般都是阻塞的,所以read操作往往是阻塞的,会等待可用数据,并且将线程休眠。 现在,我们应该对于异步和非阻塞的概念已经有所了解了。
一、同步与异步 概念性 同步和异步通常用来形容一次方法调用。 同步方法调用一旦开始,调用者必须等到方法调用返回后,才能继续后续的行为。...这就是异步调用。 二、阻塞与非阻塞 阻塞与非阻塞关注的是交互双方是否可以弹性工作。...一般来说,阻塞与非阻塞式用来形容 CPU 消耗的。我们把 CPU 停下来等待慢操作完成以后再接着工作称为阻塞;把 CPU 在慢操作完成之前去完成其他工作,等慢操作完成后再接着工作称为非阻塞。...一般来说IO模型可以分为:同步阻塞,同步非阻塞,异步阻塞,异步非阻塞。...异步阻塞IO 此种方式下是指应用发起一个IO操作以后,不等待内核IO操作的完成, 等内核完成IO操作以后会通知应用程序,这其实就是同步和异步最关键的区别同步必须等待或者主动的去询问IO是否完成, 异步非阻塞
领取专属 10元无门槛券
手把手带您无忧上云