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

阻塞 & 阻塞 | 同步 & 异步

这里讲的都是基于IO的 阻塞阻塞同步、异步 ---- 一个典型的IO操作包括了两个阶段,数据准备和数据读写。比如说现在要使用 recv 执行一个读操作,数据就绪就是远端是否有数据可读。...当IO工作在阻塞状态的时候,如果数据没有就绪,recv就会阻塞当前线程;如果说IO工作在阻塞状态,会立即返回。...返回值-1的话,就说明连接出现问题,连接异常;如果返回值是0,且errno是EAGIN的话,就说明这是一个正常的阻塞,返回数据未就绪状态。...一个同步IO接口的示例: char buf[1024]; int sz = recv(sockfd,buf,1024,0); //阻塞:一直在这儿死等 //阻塞:时不时的回来问一 if(sz>0)...仅被 lio_listio() 函数使用 */ /* Various implementation-internal fields not shown */ }; 陈硕大神说:在处理IO的时候,阻塞阻塞都是同步

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

    同步、异步、阻塞阻塞

    这种情况,用户不能关闭界面,如果关闭了,即迁移程序就中断了。同步,是所有的操作都做完,才返回给用户结果。即写完数据库之后,在相应用户,用户体验不好。...阻塞阻塞   应用进程请求I/O操作时,如果数据未准备好,如果请求立即返回就是非阻塞,不立即返回就是阻塞。简单说就是做一件事如果不能立即获得返回,需要等待,就是阻塞,否则就可以理解为阻塞。...阻塞 阻塞阻塞的概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。...同步/异步与阻塞/阻塞的组合 同步阻塞形式: 等待执行结果是一直等待,执行时线程挂起(未对fd 设置O_NONBLOCK 标志位的read/write 操作) 同步阻塞形式:等待执行结果是一直等待,...异步阻塞形式:在处理消息是不等待,在执行消息是也不等待。

    3K40

    同步异步,阻塞阻塞

    什么是阻塞阻塞 阻塞阻塞是针对于进程在访问数据的时候,根据IO操作的就绪状态来采取的不同方式,阻塞方式读取或者写入函数将一直等待,而非阻塞方式,读取或者写入函数会立即返回一个状态值。...同步/异步与阻塞/阻塞的区别 同步与异步:针对数据访问的方式,程序是主动去询问操作系统数据准备好了么,还是操作系统在数据准备好的时候通知程序。...内核应用程序  同步执行,阻塞/阻塞。用户进程/线程无法直接读写内核数据,需要数据在用户空间和内核空间搬来搬去。除非个别接口,否则一般是同步的。...可以是阻塞阻塞阻塞则一直在等待内核/应用程序把IO数据准备好,阻塞则是直接返回内核/应用程序是否已经准备好数据。 应用程序框架:同步或异步。...IO多路复用,同步,异步,阻塞阻塞 区别 关于异步,同步阻塞阻塞 解读I/O多路复用技术

    3.1K60

    同步、异步、阻塞阻塞

    同步、异步、阻塞阻塞(网络编程) 同步 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。 按照这个定义,其实绝大多数函数都是同步调用(例如sin, isdigit等)。...阻塞 阻塞阻塞的概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。...同步阻塞:小明一直盯着下载进度条,到 100% 的时候就完成。 同步阻塞:小明提交下载任务后就去干别的,每过一段时间就去瞄一眼进度条,看到 100% 就完成。...(最机智) 也就是说,同步/异步是下载软件的通知方式,或者说 API 被调用者的通知方式。阻塞/阻塞则是小明的等待方式,或者说 API 调用者的等待方式。...在不同的场景同步/异步、阻塞/阻塞的四种组合都有应用。

    2.2K50

    IO - 同步,异步,阻塞阻塞

    同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和阻塞(non-blocking)IO分别是什么,到底有什么区别?...所以,为了更好的回答这个问题,我先限定一本文的上下文。 本文讨论的背景是Linux环境的network IO。...blocking IO 在linux中,默认情况所有的socket都是blocking,一个典型的读操作流程大概是这样: ?...non-blocking IO linux,可以通过设置socket使其变为non-blocking。当对一个non-blocking socket执行读操作时,流程是这个样子: ?...Asynchronous I/O linux的asynchronous IO其实用得很少。先看一它的流程: ? 用户进程发起read操作之后,立刻就可以开始去做其它的事。

    2.2K10

    同步异步阻塞阻塞详解

    阻塞阻塞 对于阻塞阻塞,其实更关心的是进程的状态,如果函数返回结果之前,主进程被挂起,也就是处于阻塞状态,那这时候整个过程是阻塞的;如果结果返回之前,主进程状态是非阻塞的,那整个过程是非阻塞。...举个例子 同步与异步: 你打电话问书店老板有没有《分布式系统》这本书,如果是同步通信机制,书店老板会说,你稍等,”我查一”,然后开始查啊查,等查好了(可能是5秒,也可能是一天)告诉你结果(返回结果)...在这里阻塞阻塞与是否同步异步无关。跟老板通过什么方式回答你结果无关。...这时候关心的是你是否立即有答复,你是否离开了书店 c++ socket阻塞阻塞代码 阻塞模式的socket读取 int main(){ #创建和绑定socket,creat和bind函数...Client"); res = write(fd, buf, sizeof(buf)); printf("send data : %s\n", buf); } } 阻塞模式

    2K50

    同步、异步、阻塞阻塞

    同步和异步 同步:是用户线程发起IO请求需要等待或者轮询内核IO操作完成后才能继续执行。...阻塞阻塞 阻塞:是指IO操作需要彻底完成后才能返回用户空间。 阻塞:是指IO操作被调用后立即返回一个状态值,无需等待IO操作完成。...同步和异步(线程间调用) 同步和异步是对应调用者和被调用者,他们是线程之间的关系,两个线程之间要么是同步的,要么是异步的。 同步操作时,调用者需要等待被调用者返回结果,才能进行下一步操作。...阻塞阻塞(线程内调用) 阻塞阻塞是对于一个线程来讲的,在任意时刻,线程要么是处于阻塞的,要么是出于阻塞的。 阻塞阻塞关注的程序等待调用结果(消息,返回值)时的状态。...阻塞调用是指调用结果返回之前,当前线程会被挂起,调用线程只有在得到结果之后才会返回。 阻塞调用是指不能立刻得到返回结果之前,该调用就不会阻塞当前线程。

    2.2K40

    浅析同步异步阻塞阻塞

    关键点: 同步和异步是与进程相关的,同步与异步主要是从消息通知机制角度来说的。阻塞阻塞是与线程相关的,阻塞阻塞是等待消息通知时的状态角度来说的。...Linux五种IO模型: 从根本上讲I/O操作分为两部分,用户层API调用(内核);内核层完成系统调用(发起I/O请求) 所以“异步/同步”的是指API调用;“阻塞/阻塞”是指内核完成I/O调用的模式...同步阻塞(NIO):是用户层的读或写的请求转换成内核的I/O请求,用户层同步,内核I/O阻塞(读到返回字节,读不到返回-1)。...总结:同步和异步仅仅是关注的消息如何通知的机制,而阻塞阻塞关注的是等待消息通知时的状态。...也就是说,同步的情况,是由处理消息者自己去等待消息是否被触发,而异步的情况是由触发机制来通知处理消息者。

    2K80

    同步、异步与阻塞阻塞

    举个例子:   你打电话问书店老板有没有《分布式系统》这本书,如果是同步通信机制,书店老板会说,你稍等一,我查一,然后开始查啊查,等查好了(可能是   5秒,也可能是一天)告诉你结果(返回结果)。...阻塞阻塞   阻塞阻塞关注的是程序在等待调用结果(消息,返回值)时的状态。   阻塞调用是指调用结果返回之前,当前线程会被挂起,调用线程只有在得到结果之后才会返回。   ...阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。   ...阻塞阻塞与是否同步异步无关。 总结: 阻塞:进程给CPU传达一个任务之后,一直在等待CPU处理完成,然后才执行后边的操作。   ...阻塞:进程给CPU传达一个任务之后,继续处理后续的操作,隔段时间再来询问之前的操作是否完成,这样的机制也叫轮询。

    2.1K20

    同步、异步与阻塞阻塞

    通常,同步操作是阻塞的,而异步操作阻塞,但两对概念也可以交叉组合。 同步与异步是基于消息和通信的概念。...异步操作立即返回,操作完成后通知,而同步操作等待操作完成才返回(返回就相当于完成通知,也意味着没有通知)。 阻塞阻塞的最大区别在于,执行操作后资源是否可用(当然是否阻塞也是他们的区别)。...阻塞操作执行后资源可用,阻塞操作执行后则不一定可用。 例如同步阻塞,执行语句后就可以做别的,但是资源不可用,没有完成通知,因此需要轮询。...异步阻塞,执行语句后不能做别的,执行下一条语句时资源已经可用了,有完成通知(异步阻塞同步阻塞只差一个通知,基本没有区别)。

    1.5K10

    同步异步与阻塞阻塞

    | 导语 同步异步与阻塞阻塞是开发中经常碰到的概念,但是很多人都没理解清楚,或者混淆了它们的概念。最近看了一些材料,发现以前很多理解都是错的,所以重新整理了一。...如果你是个研发,同步、异步、阻塞阻塞(还有IO多路复用)这些概念应该不陌生了。但是很多人却没有真正搞懂他们的含义,甚至经常把他们混淆了。 先上几个错误的表达提提神: 阻塞IO模型是异步IO。...第一个表达,“阻塞IO模型是异步IO” 的说法是错误的,在UNP一书中有介绍,那么“阻塞IO模型是同步IO模型”正确么?从《Unix网络编程》6.2节中的描述来看,是正确的。...总结 前面根据概念的的讨论范围,分别介绍了与同步、异步、阻塞阻塞等相关的概念。其实他们也是有共通点的。 同步和异步关注的是消息的通信机制。...反之则是同步阻塞阻塞关注的是最终结果是否返回了。 阻塞就是:我告诉你我要做什么,如果现在能做,那就做完再返回;如果现在还做不了,你也给我个信儿,跟我说这事儿还做不了。

    1.9K230

    IO - 同步,异步,阻塞阻塞

    同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和阻塞(non-blocking)IO分别是什么,到底有什么区别?...所以,为了更好的回答这个问题,我先限定一本文的上下文。 本文讨论的背景是Linux环境的network IO。...blocking IO 在linux中,默认情况所有的socket都是blocking,一个典型的读操作流程大概是这样: ?...non-blocking IO linux,可以通过设置socket使其变为non-blocking。当对一个non-blocking socket执行读操作时,流程是这个样子: ?...Asynchronous I/O linux的asynchronous IO其实用得很少。先看一它的流程: ? 用户进程发起read操作之后,立刻就可以开始去做其它的事。

    1.9K30

    同步与异步 阻塞阻塞

    1.3小结:      同步和异步仅仅是关于所关注的消息如何通知的机制,而不是处理消息的机制.也就是说,同步的情况,是由处理消息者自己去等待消息是否被触发,而异步的情况是由触发机制来通知处理消息者...2.同步、异步、阻塞阻塞的理解 2.1同步阻塞I/O      官方解释:用户空间的应用程序执行一个系统调用时,会导致应用程序阻塞。...2.2同步阻塞I/O      官方解释:      我的理解:我去银行存钱时,我不得不在队伍中排队等待,但我在等待过程中我还会打电话看书。...2.3异步阻塞I/O      官方解释:另外一个阻塞解决方案是带有阻塞通知的阻塞 I/O。...3.总结      同步与异步是一组相对概念,针对的是自己等待还是别人通知      阻塞阻塞是一组相对概念,针对的是等待过程中,等待者的操作。

    1.2K20

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

    ,调用者不需要等待被调用者返回调用,即可进行下一步操作,被调用者通常依靠事件、回调等机制来通知调用者结果 阻塞阻塞(线程内调用) 阻塞阻塞是对同一个线程来说的,在某个时刻,线程要么处于阻塞,要么处于阻塞...阻塞阻塞关注的是程序在等待调用结果(消息,返回值)时的状态: 阻塞调用是指调用结果返回之前,当前线程会被挂起。...阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。...回调函数 二、同步线程与异步线程: 同步线程:即两个线程步调要一致,其中一个线程可能要阻塞等待另外一个线程的运行,要相互协商。快的阻塞等到慢的步调一致。...同步阻塞方式: 发送方发送请求之后,一直等待响应。 接受方处理请求时进行的IO操作如果不能马上的得到结果,就立即返回,取做其他事情。

    1.2K31

    准确理解阻塞阻塞同步、异步

    有的人还会把阻塞/阻塞同步/异步混合起来理解,认为阻塞=同步阻塞=异步。 那么到底是不是这样呢?这篇文章,我们就从本质上跟大家分享一这几个概念,到底应该怎么样去准确理解他们。...0 阻塞/阻塞 首先我们要明确的第一个概念是:阻塞/阻塞是一种现象,这是一个相对概念。 例如我们去医院看病。当你挂号之后,发现前面还有人在排队等待。那么前面的人,对于你而言,都是阻塞任务。...因此,我们学习的时候,重点不应该放在阻塞/阻塞的概念上,而是应该去关注任务执行顺序和任务优先级的约定。阻塞/阻塞只是在描述一个现象,一个结果。...那在我们前端,也有这样一个类似的场景,在请求接口时,我们看一下面这两种写法: 阻塞式 const res = await api() // 阻塞式:等待 api 调用成功并有返回结果之后,才能执行后面的任务...api().then(res => { console.log('xxx') }) foo(); 然后呢,在同步模式,我应该怎么办呢?很简单,我们可以借助 await 来模拟。

    9510

    同步与异步,阻塞阻塞

    在讲 BIO,NIO,AIO 之前,先来回顾一这样几个概念:同步与异步,阻塞阻塞。...同步与异步 同步同步就是发起一个调用后,被调用者未处理完请求之前,调用不返回; 异步: 异步就是发起一个调用后,立刻得到被调用者的回应,表示已接收到请求,但是被调用者并没有返回结果,此时我们可以处理其他的请求...阻塞阻塞 阻塞阻塞就是发起一个请求,调用者一直等待请求结果返回,也就是当前线程会被挂起,无法从事其他任务,只有当条件就绪时才能继续; 阻塞阻塞就是发起一个请求,调用者不用一直等着结果返回...举个生活中简单的例子: 你妈妈让你烧水,小时候你比较笨啊,在那里傻等着水开(同步阻塞); 等你稍微长大了,你知道每次烧水的空隙可以去干点其他事,然后只需要时不时来看看水开了没有(同步阻塞); 再后来...,你们家用上了水开了会发出声音的壶,这样你只需要听到响声后,就知道水开了,在这期间你可以随便干自己的事情,最后才需要去倒水了(异步阻塞)。

    1.2K20

    番外:同步异步阻塞阻塞,了解一?(十三节)

    ]还是[ 阻塞 ]的,异步表现在于馒头好了后,阿梅会主动告诉研究僧 总结一大概意思就是: [ 阻塞 ]和[ 阻塞 ]在于等馒头的时候,研究僧在干什么 [ 同步 ]和[ 异步 ]在于是研究僧自己主动获取馒头状态...也就是说select\poll\epoll也是同步的,而在Linux只有AIO(PHP中的扩展叫做EIO)是异步。...既然在LinuxNginx事件是基于epoll实现的,然而上面又说了epoll这样的IO复用属于同步,那这里为什么会说[ 异步 ]阻塞?...在Linux,指的就是AIO,唯有AIO才是真正符合定义(此处定义既指APUE中的经典异步定义)的异步!...下个章节通过代码实战来说明[ 同步阻塞 ]和[ 同步阻塞 ],AIO的咱就不碰了,有兴趣同学自己可以折磨下自己。

    68531

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

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

    86840
    领券