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

阻塞和非阻塞读取有什么区别?

阻塞和非阻塞读取是指在进行数据读取操作时,对于读取结果的处理方式不同。

阻塞读取是指当进行数据读取操作时,如果没有数据可读取,程序会一直等待,直到有数据可读取为止。在阻塞读取的过程中,程序会暂停执行,无法进行其他操作。阻塞读取适用于对数据实时性要求不高的场景,例如文件读取、网络请求等。

非阻塞读取是指当进行数据读取操作时,如果没有数据可读取,程序会立即返回一个错误码或空值,而不会等待数据的到来。在非阻塞读取的过程中,程序可以继续执行其他操作,不会被阻塞。非阻塞读取适用于对数据实时性要求较高的场景,例如实时数据流处理、高并发网络通信等。

区别:

  1. 阻塞读取会一直等待数据的到来,而非阻塞读取会立即返回结果。
  2. 阻塞读取会暂停程序的执行,无法进行其他操作,而非阻塞读取可以同时进行其他操作。
  3. 阻塞读取适用于对数据实时性要求不高的场景,而非阻塞读取适用于对数据实时性要求较高的场景。

推荐的腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

阻塞阻塞的实现

我们可能都已经听过阻塞阻塞的概念,本文以tcp中的connect系统调用为例子(基于1.12.13内核,新版的原理类似,但是过程就很复杂了,有时间再分析),分析阻塞阻塞是什么并且看他是如何实现的。...sock->state = SS_CONNECTED; // 返回成功 return(0); } 我们看到connect函数首先会调用tcp层的函数发送一个sync包,然后根据socket的属性(阻塞阻塞...这也是非阻塞+事件驱动架构中的做法。因为这种架构下通常是单进程的,要避免阻塞进程,那么返回后什么时候才能知道连接成功呢?...(); schedule(); remove_wait_queue(p, &wait); restore_flags(flags); } 这里我们只关注两个地方add_wait_queueschedule...以上就是进程阻塞阻塞的原理。

2.2K20

同步、异步、阻塞阻塞

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

2.2K40
  • 深入理解--异步阻塞同步阻塞异步阻塞

    异步阻塞的概念实际上已经出现了很长一段时间。但是异步真正开始流行起来,是因为AJAX技术逐渐成为主流的web开发技术。...本文就会详细讨论这个问题,希望能帮助读者更好的了解这几个概念 同步阻塞 首先,我们先开始介绍与异步阻塞对立的两个概念:同步阻塞 对于web开发者来说,理解同步的概念相对比较容易,因为HTTP协议就是一个同步的协议...意思就是,如果已经到了流的末尾没有可读取的数据,那么就会返回-1。这个方法会一直阻塞,直到读取的数据,或者已经读到了流的末尾,或者抛出一个异常。...这个方法的调用会一直阻塞,因为他会一直等待直到输入的数据可以用来读取。这通常会造成性能的瓶颈,因为这个方法会阻塞,导致无法继续执行随后的操作。 异步阻塞 异步阻塞就是同步阻塞的相反面。...而非阻塞则是,老板不会主动通知你,而是你自己隔个一两天就去这家店主动问问,专辑到了么,直到一次你询问的时候,终于发现专辑到了。阻塞的概念常常用于I/O中,而异步的概念则相对应用的比较广泛。

    1K40

    阻塞IO、阻塞IOIO复用啥区别?

    引言在进行网络编程或系统开发时,经常会遇到阻塞IO、阻塞IOIO复用这些概念。对于初学者来说,可能很容易混淆它们之间的区别使用场景。...本文将详细解释阻塞IO、阻塞IOIO复用的概念、特点及适用场景,帮助读者更好地理解应用它们。图片1....在阻塞IO中,当读取数据时,如果没有数据可读,函数将立即返回一个错误码;当写入数据时,如果无法立即将数据写入目标,函数将立即返回一个错误码。通过轮询或选择机制,可以确定是否有数据可读或可写。...同时,IO复用相对于阻塞IO具有更高的性能可扩展性,因此在高并发场景下是首选的。结论本文详细介绍了阻塞IO、阻塞IOIO复用这三种不同的IO模型。...了解这些概念区别对于进行网络编程或系统开发都非常重要,希望本文能够帮助读者更好地理解应用阻塞IO、阻塞IOIO复用。

    91020

    阻塞阻塞的区别verilog_如何理解阻塞阻塞

    简单点说: 阻塞就是干不完不准回来, 阻塞就是你先干,我现看看有其他事没有,完了告诉我一声 我们拿最常用的sendrecv两个函数来说吧… 比如你调用send函数发送一定的Byte,在系统内部...:耗费着系统资源….对于阻塞模式的socket该函数会马上返回,然后告诉你:WSAEWOULDDBLOCK—“现在没有数据,回头在来看看” 扩展: 在进行网络编程时,我们常常见到同步、异步、阻塞阻塞四种调用方式...阻塞 阻塞阻塞的概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。...对象的阻塞模式阻塞函数调用 对象是否处于阻塞模式函数是不是阻塞调用很强的相关性,但是并不是一一对应的。...阻塞对象上可以阻塞的调用方式,我们可以通过一定的API去轮询状态,在适当的时候调用阻塞函数,就可以避免阻塞。而对于阻塞对象,调用特殊的函数也可以进入阻塞调用。

    2.3K20

    同步与异步,阻塞阻塞

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

    1.2K20

    Java同步异步,阻塞阻塞

    同步异步、阻塞阻塞 同步异步关注的是消息通信机制. 同步是指: 发送方发出数据后, 等待接收方发回响应后才发下一个数据包的通讯方式....阻塞阻塞属于进程API执行动作的方式, 关注的是程序在等待调用结果时的状态. 阻塞是指: 调用结果返回之前, 当前线程会被挂起. 函数只有在得到结果之后才会返回, 线程需要等待结果....阻塞是指: 与阻塞的概念相对应, 指在不能立刻得到结果之前, 该函数不会阻塞当前线程, 而会立刻返回. 线程不需要等待结果....阻塞: 线程同样需要线程B给一个数, 但是线程A仅仅告知线程B要给这个数, 并没有马上就要使用这个数, 此时线程A没有被挂起, 仍然能分到cpu, 仍然能执行, 这样被称为阻塞....异步阻塞: 没有例子. 阻塞就是用来实现同步的,这同步阻塞什么区别, 那实现它还有什么用呢?

    5.5K31

    Linux编程(阻塞阻塞IO)

    Linux设备驱动中的阻塞阻塞I/0,简单来说就是对I/O操作的两种不同的方式,驱动程序可以灵活的支持用户空间对设备的这两种访问方式。...阻塞应用程序通常使用select系统调用查询是否可以对设备进行无阻塞的访问最终会引发设备驱动中 poll 函数执行。...二、两种操作 阻塞读取一个字符: char buf; fd = open("/dev/ttyS1",O_RDWR); ..... res = read(fd,&buf,1); //当串口上有输入时才返回...=1); //串口上没有输入则返回,所以循环读取 printf("%c/n",buf); 阻塞操作常常用等待队列来实现,而非阻塞操作用轮询的方式来实现。...阻塞I/O的操作在应用层通常会用到select()poll()系统调用查询是否可对设备进行无阻塞访问。select()poll()系统调用最终会引发设备驱动中的poll()函数被调用。

    5.5K20

    分布式系统关注点(20)——阻塞阻塞什么区别

    其实我知道不少小伙伴容易将「异步」阻塞」搞混。脑海里印象可能是这样的:异步=阻塞,同步=阻塞? 其实并不是如此,Z哥我这次就想来帮你搞清楚这个问题。...同步与阻塞/阻塞 你平时编写的代码中,大部分的「同步」调用,本质上都是「阻塞」的。但是「同步」调用也可以做到「阻塞」的效果。...上图中,几次阻塞之间空白区域就可以用于做其它事,所以是「阻塞」的。 异步与阻塞/阻塞 上一篇文章中的「异步」例子就是一个「阻塞」的例子,我们来看看为什么。...奶茶店分了点单区取餐区之后,做好的饮料就只能从取餐区拿,也意味着接待你进行点单的人并不是实际做奶茶的人。这个时候你会拿到一张取餐号,然后老老实实的去取餐区等着,而不是“占着xx不xx”。...之所以大家会有错觉,认为「异步」=「阻塞」,其实也不是没有道理。为什么呢?因为我在脑海中搜寻来一番,的确没想到什么知名的框架/设计是使用「异步」+「阻塞」来实现的。

    67020

    同步、异步、阻塞阻塞

    阻塞阻塞   应用进程请求I/O操作时,如果数据未准备好,如果请求立即返回就是非阻塞,不立即返回就是阻塞。简单说就是做一件事如果不能立即获得返回,需要等待,就是阻塞,否则就可以理解为阻塞。...阻塞 阻塞调用是指调用结果返回之前,当前线程会被挂起。函数只有在得到结果之后才会返回。有人也许会把阻塞调用同步调用等同起来,实际上它们是不同的。...如果主窗口调用函数在同一个线程中,除非你在特殊的界面操作函数中调用,其实主界面还是应该可以刷新。socket接收数据的另外一个函数recv则是一个阻塞调用的例子。...阻塞 阻塞阻塞的概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。...同步/异步与阻塞/阻塞的组合 同步阻塞形式: 等待执行结果是一直等待,执行时线程挂起(未对fd 设置O_NONBLOCK 标志位的read/write 操作) 同步阻塞形式:等待执行结果是一直等待,

    3K40

    同步异步,阻塞阻塞

    什么是同步异步 同步异步是针对应用程序内核的交互而言的, 同步指的是用户进程触发IO操作并等待或者轮询的去查看IO操作是否就绪,而异步是指用户进程触发IO操作以后便开始做自己的事情,而当IO操作已经完成的时候会得到...什么是阻塞阻塞 阻塞阻塞是针对于进程在访问数据的时候,根据IO操作的就绪状态来采取的不同方式,阻塞方式下读取或者写入函数将一直等待,而非阻塞方式下,读取或者写入函数会立即返回一个状态值。...CPU通知DMA读取IO设备数据,然后就去做其他的事情,等DMA把数据从IO设备中读到内核内存中,去通知CPU已经完成IO操作。所以这一步是异步的。...内核应用程序  同步执行,阻塞/阻塞。用户进程/线程无法直接读写内核数据,需要数据在用户空间内核空间搬来搬去。除非个别接口,否则一般是同步的。...IO多路复用,同步,异步,阻塞阻塞 区别 关于异步,同步,阻塞阻塞 解读I/O多路复用技术

    3.1K60

    阻塞 & 阻塞 | 同步 & 异步

    这里讲的都是基于IO的 阻塞阻塞、同步、异步 ---- 一个典型的IO操作包括了两个阶段,数据准备和数据读写。比如说现在要使用 recv 执行一个读操作,数据就绪就是远端是否有数据可读。...当IO工作在阻塞状态下的时候,如果数据没有就绪,recv就会阻塞当前线程;如果说IO工作在阻塞状态下,会立即返回。...如果是异步,在传入sockfdbuf之外,还要传入通知方式,告诉操作系统的异步IO负责监听这个sockfd是否有数据可读,如果有,操作系统将数据拷贝到buf中,并通知应用程序。...{ //在上面的数据没有读取完成之前,是不会进入到这里的 } 如果说异步,就是同步的反面,那也能说得通。...仅被 lio_listio() 函数使用 */ /* Various implementation-internal fields not shown */ }; 陈硕大神说:在处理IO的时候,阻塞阻塞都是同步

    2.9K10

    从事件调度理解阻塞阻塞

    所有对该实践敏感的进程都会按照任意顺序进行评估仿真时间用来模拟被仿真电路所需的实际时间2 事件队列Verilog事件队列被分为五个区域:活跃事件、活跃事件、阻塞赋值更新时间、监视事件将来事件下面是大佬总结的图图片在执行顺序上...:活跃事件 -> 活跃事件 -> 阻塞赋值更新事件 -> 监控事件 -> 将来事件不过这五个事件内包含的操作,它们的执行顺序是随机的我对当前仿真时间的理解是当T,将来仿真时间是次T3 确定性不确定性...block中,而这两个block我们没办法预知到底是哪个block先执行,因此最终变量q是a的值还是b的值是不确定的,这也是为什么在学习Verilog时一直在强调,同一个变量不能在多个block中进行赋值4 阻塞阻塞从上面的调度表可以看出...,阻塞赋值在活跃事件中;阻塞的右式计算在活跃事件中,而更在阻塞赋值更新事件中由于事件队列的执行是顺序执行的,当仿真进入当前仿真时间时,先执行活跃事件,对于阻塞阻塞来说,当进入活跃事件时,阻塞赋值进行右式计算...、阻塞赋值的右式计算$display都属于活跃事件那么对于这个例子可以做出提前预测结果,变量a成功赋值,变量b没有完成赋值,来看看运行结果图片可以看到运行结果与我们的猜测一致同样的,如果我们加入监控事件

    44530

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

    为了后续的理解,首先搞清楚一个有无数讲解却又令人费解的概念:阻塞阻塞、同步异步。首先需要搞清楚的一件事,就是对于 Linux 系统, I/O 操作不是一步完成的。...了解了这个大前提,我们再来看上述四个概念阻塞阻塞首先明确一点:阻塞阻塞发生在请求处,关注的是程序在等待调用结果时的状态。...阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前进程(线程),进程(线程) 可以去干别的事情。一般使用轮询的方式来查询 I/O 操作数据是否准确好了。...理解上面概念的一个要点是请求的结果是否立即返回,同时需要注意的是,结果立即返回,不代表 I/O 操作完成,阻塞阻塞只关注请求是否立即获得结果。...阻塞阻塞是指进程访问的数据如果尚未就绪,进程是否需要等待,简单说这相当于函数内部的实现区别,也就是未就绪时是直接返回还是等待就绪。

    18310

    同步、异步、阻塞阻塞

    同步、异步、阻塞阻塞(网络编程) 同步 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。 按照这个定义,其实绝大多数函数都是同步调用(例如sin, isdigit等)。...阻塞 阻塞阻塞的概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。...对象的阻塞模式阻塞函数调用 对象是否处于阻塞模式函数是不是阻塞调用很强的相关性,但是并不是一一对应的。...阻塞对象上可以阻塞的调用方式,我们可以通过一定的API去轮询状态,在适当的时候调用阻塞函数,就可以避免阻塞。而对于阻塞对象,调用特殊的函数也可以进入阻塞调用。...(轮询) 异步阻塞:小明换了个下载完成通知功能的软件,下载完成就“叮”一声。

    2.2K50

    阻塞队列与阻塞队列

    使用线程安全队列的场景很多,Java在实现同步机制时,多线程对竞争资源进行操作时,同一时刻只能有一个线程可以操作,其他线程进行阻塞等待,这时,需要使用一种容器队列来装载等待的线程,在入队出队时候保证线程的安全性...Java提供两种方式来实现阻塞阻塞式,阻塞式使用锁实现,阻塞式使用CAS方式实现。使用阻塞队列阻塞队列的场景还有很多,比较常用的就是我们常说的生产者\消费者模型。...阻塞队列 ConcurrentLinkedQueue——无界阻塞队列 ? ?...阻塞队列 Java提供了一个阻塞队列的接口——BlockingQueue,在队列的基础上增加可阻塞添加元素阻塞获取元素的方法。 ? ?...,当入队时则会唤醒阻塞的出队操作线程;当队列满时,进行入队操作的线程将被阻塞,当出队时则会唤醒阻塞的入队操作线程。

    3.1K30

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

    同步(synchronous) IO异步(asynchronous) IO,阻塞(blocking) IO阻塞(non-blocking)IO分别是什么,到底什么区别?...再说一下IO发生时涉及的对象步骤。...而在用户进程这边,整个进程会被阻塞。当kernel一直等到数据准备好了,它就会将数据从kernel中拷贝到用户内存,然后kernel返回结果,用户进程才解除block的状态,重新运行起来。...最后,再举几个不是很恰当的例子来说明这四个IO Model: A,B,C,D四个人在钓鱼: A用的是最老式的鱼竿,所以呢,得一直守着,等到鱼上钩了再拉杆; B的鱼竿个功能,能够显示是否鱼上钩,所以呢...,B就和旁边的MM聊天,隔会再看看有没有鱼上钩,有的话就迅速拉杆; C用的鱼竿B差不多,但他想了一个好办法,就是同时放好几根鱼竿,然后守在旁边,一旦显示说鱼上钩了,它就将对应的鱼竿拉起来; D是个有钱人

    2.2K10

    同步异步阻塞阻塞详解

    阻塞阻塞 对于阻塞阻塞,其实更关心的是进程的状态,如果函数返回结果之前,主进程被挂起,也就是处于阻塞状态,那这时候整个过程是阻塞的;如果结果返回之前,主进程状态是非阻塞的,那整个过程是非阻塞。...这时候关心的是你是否在等待结果,有没有不管这件事 阻塞阻塞: 你打电话问书店老板有没有《分布式系统》这本书,你如果是阻塞式调用,你会一直把自己“挂起”,直到得到这本书有没有的结果,如果是非阻塞式调用...在这里阻塞阻塞与是否同步异步无关。跟老板通过什么方式回答你结果无关。...这时候关心的是你是否立即有答复,你是否离开了书店 c++ socket阻塞阻塞代码 阻塞模式下的socket读取 int main(){ #创建和绑定socket,creatbind函数...socket读取 int main(){ #创建和绑定socket,creatbind函数 #设置socket为non-block,使用fcntl函数 #创建epoll,检测

    2K50
    领券