0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

什么是阻塞和非阻塞?

学益得智能硬件 来源:学益得智能硬件 2024-03-25 10:04 次阅读

什么是阻塞和非阻塞?我们就用管道的读写来举例子。

如果没听过管道,就把他理解成文件就行。

一个程序打开管道,并且往管道里面写入数据;

intmain()
{
intfd=open("fifo",O_WRONLY);
if (-1 == fd)
{
    perror("open");
}

char buf[32] = {0};
scanf("%s", buf);

if (write(fd, buf, strlen(buf)) == -1)
{
    perror("write");
}

    return 0;
}
另一个程序打开管道,从管道里面读取数据。
int main()
{
intfd=open("fifo",O_RDONLY);
    if (-1 == fd)
    {
        perror("open");
    }
    
charbuf[32]={0};
    
    if (read(fd, buf, sizeof(buf)) == -1)
    {
        perror("write");
    }
    
    return 0;
}
默认情况下,用open打开管道是阻塞的模式,也就是说,如果管道没有数据,程序一直停在 read 函数这里,直到管道里面有数据,把它读出来。

创建一个管道,运行程序,现象就是这样的,程序此时阻塞在 read 函数。

如果通过写进程往管道里面写入数据,read能立马把数据读出来。

open函数还给我们提供了非阻塞的模式,加上这个选项,运行程序的时候,即使管道里面没有数据,程序也不会停在 read 函数上,继续向下执行。

这两个现象,就是阻塞和非阻塞。

最后,放上百科的一段解释,大家还有什么见解,欢迎在评论区交流。
阻塞和非阻塞指的是调用者(程序)在等待返回结果(或输入)时的状态。
阻塞时,在调用结果返回前,当前线程会被挂起,并在得到结果之后返回。
非阻塞时,如果不能立刻得到结果,则该调用者不会阻塞当前线程。
因此对应非阻塞的情况,调用者需要定时轮询查看处理状态。


审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 阻塞
    +关注

    关注

    0

    文章

    24

    浏览量

    8100

原文标题:什么是阻塞和非阻塞

文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Verilog语言中阻塞阻塞赋值的不同

    来源:《Verilog数字系统设计(夏宇闻)》 阻塞阻塞赋值的语言结构是Verilog 语言中最难理解概念之一。甚至有些很有经验的Verilog 设计工程师也不能完全正确地理解:何时使用
    的头像 发表于 08-17 16:18 6374次阅读

    Verilog阻塞阻塞原理分析

    Verilog阻塞阻塞原理分析在Verilog语言最难弄明白的结构中“阻塞赋值”要算一个。甚至是一些很有经验的工程师也不完全明白“
    发表于 11-23 12:02

    【分享】Verilog中阻塞阻塞语句

    同了在第一个clk上升沿到来时,由于b的值未知,赋给c之后,c也为未知值;紧接着,把a的值给b,由于a的值已经给出,所以,结束之后,a、b的值相同,c为x。综合之后,生成两级移位寄存器。 关于阻塞
    发表于 11-03 20:26

    fpga基础篇(一):阻塞阻塞赋值

    `阻塞阻塞赋值首先从名字上理解,阻塞赋值即赋值没完成,后边的语句将无法执行,阻塞刚好与其相
    发表于 04-05 09:53

    同步与异步,阻塞阻塞的区别是什么

    同步与异步,阻塞阻塞的区别
    发表于 01-26 06:12

    阻塞阻塞赋值的区别是什么?

    本文通过Verilog事件处理机制,详细讨论了阻塞阻塞赋值的区别、联系及其应用示例。
    发表于 05-10 06:59

    深入理解阻塞阻塞赋值

    这是一个很好的学习阻塞阻塞的资料,对于FPGA的学习有很大帮助。
    发表于 04-22 11:00 11次下载

    深入分析verilog阻塞阻塞赋值

    学verilog 一个月了,在开发板上面写了很多代码,但是始终对一些问题理解的不够透彻,这里我们来写几个例子仿真出阻塞阻塞的区别
    发表于 02-11 03:23 1396次阅读

    《Linux设备驱动开发详解》第8章、Linux设备驱动中的阻塞阻塞IO

    《Linux设备驱动开发详解》第8章、Linux设备驱动中的阻塞阻塞IO
    发表于 10-27 11:35 9次下载
    《Linux设备驱动开发详解》第8章、Linux设备驱动中的<b class='flag-5'>阻塞</b>与<b class='flag-5'>非</b><b class='flag-5'>阻塞</b>IO

    从I/O的阻塞阻塞、I/O处理的单线程与多线程角度探讨服务器模型

    这里探讨的服务器模型主要指的是服务器端对I/O的处理模型。从不同维度可以有不同的分类,这里从I/O的阻塞阻塞、I/O处理的单线程与多线程角度探讨服务器模型。
    的头像 发表于 01-08 16:13 6998次阅读

    FPGA的视频教程之Verilog中阻塞阻塞的详细资料说明

    本文档的主要内容详细介绍的是FPGA的视频教程之Verilog中阻塞阻塞的详细资料说明。
    发表于 03-26 17:16 2次下载
    FPGA的视频教程之Verilog中<b class='flag-5'>阻塞</b>与<b class='flag-5'>非</b><b class='flag-5'>阻塞</b>的详细资料说明

    时序逻辑中的阻塞阻塞

    Verilog HDL的赋值语句分为阻塞赋值和阻塞赋值两种。阻塞赋值是指在当前赋值完成前阻塞其他类型的赋值任务,
    的头像 发表于 03-15 13:53 3050次阅读

    阻塞阻塞通信的区别 阻塞阻塞应用场景

    阻塞通信(Blocking Communication):当进行阻塞通信时,调用者在发起一个I/O操作后会被阻塞,直到该操作完成返回才能继续执行后续代码。
    的头像 发表于 06-15 17:32 6061次阅读

    网络IO模型:阻塞阻塞

    阻塞 IO 模型 在Linux ,默认情况下所有的 socket 都是阻塞的,一个典型的读操作流程如图所示。 阻塞阻塞的概念描述的是用户
    的头像 发表于 10-08 17:16 848次阅读
    网络IO模型:<b class='flag-5'>阻塞</b>与<b class='flag-5'>非</b><b class='flag-5'>阻塞</b>

    socket编程中的阻塞阻塞

    在网络编程中, socket 是一个非常重要的概念,它提供了一个抽象层,使得开发者可以不必关心底层的网络通信细节。 socket 编程中的阻塞阻塞模式是两种不同的操作方式,它们对程序的响应性
    的头像 发表于 11-01 16:13 189次阅读