5.1阻塞和非阻塞、同步和异步 5.2Unix、Linux上的五种IO模型

这篇具有很好参考价值的文章主要介绍了5.1阻塞和非阻塞、同步和异步 5.2Unix、Linux上的五种IO模型。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

5.1阻塞和非阻塞、同步和异步

典型的一次IO的两个阶段是什么?数据就绪和数据读写
数据就绪:根据IO操作的就绪状态

  • 阻塞
  • 非阻塞

数据读写:根据应用程序和内核的交互方式

  • 同步
  • 异步

5.1阻塞和非阻塞、同步和异步 5.2Unix、Linux上的五种IO模型,linux,unix

陈硕:在处理IO的时候,阻塞和非阻塞都是同步IO,只有使用了特殊的API才是异步IO。
5.1阻塞和非阻塞、同步和异步 5.2Unix、Linux上的五种IO模型,linux,unix
一个典型的网络接口调用,分为两个阶段,分别是“数据就绪”和“数据读写”,数据就绪阶段分成阻塞和非阻塞,表现得结果就是,阻塞当前线程或是直接返回。

同步表示A向B请求调用一个网络IO接口时(或者调用某个业务逻辑API接口时),数据的读写都是由请求方A自己来完成的(不管是阻塞还是非阻塞);异步表示A向B请求调用一个网络IO接口时(或者调用某个业务逻辑API接口时),向B传入请求的事件以及事件发生时通知的方式,A就可以处理其他逻辑了,当B监听到事件处理完成后,会用事先约定好的通知方式,通知A处理结果。

  • 同步阻塞
  • 同步非阻塞
  • 异步阻塞
  • 异步非阻塞

5.2Unix、Linux上的五种IO模型

阻塞、非阻塞是与文件描述符fd有关的。

阻塞blocking

调用者调用了某个函数,等待这个函数返回,期间什么也不做,不停的去检查这个函数有没有返回,必须等这个函数返回才能进行下一步动作。

5.1阻塞和非阻塞、同步和异步 5.2Unix、Linux上的五种IO模型,linux,unix

非阻塞non-blocking(NIO)

非阻塞等待,每隔一段时间就去检测IO事件是否就绪,没有就绪就可以做其他事。非阻塞IO执行系统调用总是立即返回,不管事件是否已经发生,若事件没有发生,则返回-1,此时可以根据errno区分着两种情况,对于accept,recv和send,事件未发生时,errno通常被设置成EAGAIN。

5.1阻塞和非阻塞、同步和异步 5.2Unix、Linux上的五种IO模型,linux,unix

IO复用(IO multicomplexing)

Linux用select/poll/epoll函数实现IO复用模型,这些函数也会使进程阻塞,但是和阻塞IO所不同的是这些函数可以同时阻塞多个IO操作。而且可以同时对多个读操作、写操作的IO函数进行检测。直到有数据可读或可写时,才真正调用IO操作函数。

5.1阻塞和非阻塞、同步和异步 5.2Unix、Linux上的五种IO模型,linux,unix

信号驱动(signal-driven)

Linux用套接口进行信号驱动IO,安装一个信号处理函数,进程继续运行并不阻塞,当IO事件就绪,进程收到SIGIO信号,然后处理IO事件。
5.1阻塞和非阻塞、同步和异步 5.2Unix、Linux上的五种IO模型,linux,unix
内核在第一个阶段是异步,在第二个阶段是同步;与非阻塞IO的区别在于它提供了消息通知机制,不需要用户进程不断地轮询检查,减少了系统API的调用次数,提高了效率。

异步(asynchronous)

Linux中,可以调用aio_read函数告诉内核描述字缓冲区指针和缓冲区的大小、文件偏移及通知的方式,然后立即返回,当内核将数据拷贝到缓冲区后,再通知应用程序。
5.1阻塞和非阻塞、同步和异步 5.2Unix、Linux上的五种IO模型,linux,unix文章来源地址https://www.toymoban.com/news/detail-525953.html

//异步 IO控制块
struct aiocb{
	int aio_filders;
	int aio_lio_opcode;
	int aio_reqprio;
	volatile void *aio_buf;
	size_t aio_nbytes;
	struct sigevent aio_sigevent;
	
	struct aiocb *_next_prio;
	int __abs_prio;
	int __policy;
	int __error_code;
	__ssize_t __return_value;
	
#ifndef __USE_FILE_OFFSET64
	__off_t aio_offset; /* File offset. */
	char __pad[sizeof (__off64_t) - sizeof (__off_t)];
#else
	__off64_t aio_offset; /* File offset. */
#endif
	char __glibc_reserved[32];
};

到了这里,关于5.1阻塞和非阻塞、同步和异步 5.2Unix、Linux上的五种IO模型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 什么是Java中的阻塞队列和非阻塞队列?

    首先,让我们从基础概念开始。在计算机科学中,数据结构可以分为两种:队列和管道。队列是一种先进先出(FIFO)的数据结构,你可以想象成排队买电影票的情况。你加入队伍的时候,你可以决定站在哪里,但是一旦决定站在哪里,你就不能改变位置。而一旦你到达队尾,

    2024年02月14日
    浏览(33)
  • 5:数据结构--5.1:线性结构,5.2:数组与矩阵

     转上一节: 考点1:线性表 1:线性表 顺序表:数据在内存中紧邻。 (1)顺序存储方式:数组的内存是连续分配的,并且是静态分配的,即在使用数组之前需要分配固 定大小的空间。  (2)链表(linked-list)存储方式:链表的内存是不连续的,前一个元素存储地址的下一个地址

    2024年04月09日
    浏览(44)
  • Verilog仿真文件中的阻塞和非阻塞赋值问题探讨

    在 RTL 代码中我们知道如果表达组合逻辑时使用“=”赋值,表达时序逻辑时使用“=”赋值,如果我们不按照这种规则来设计往往会得到意想不到的答案。虽然说在 Testbench 中我们对赋值号的要求并不是很在意,使用“=”和“=”赋值均可,都能够仿真出来结果,且最后不会被

    2024年02月07日
    浏览(26)
  • Verilog基础:在testbench中使用阻塞赋值和非阻塞赋值的区别

    相关阅读 Verilog基础 https://blog.csdn.net/weixin_45791458/category_12263729.html?spm=1001.2014.3001.5482         本文详细阐述了在一个testbench中,应该如何使用阻塞赋值与非阻塞赋值。首先说结论,建议在testbench中,对时钟信号(包括分频时钟)使用阻塞赋值,对其他同步信号使用非阻塞赋值

    2024年04月08日
    浏览(61)
  • 【MySQL】MySQL在Linux/UNIX和 Windows上的安装,验证安装和登录 MySQL的详细讲解

    作者简介: 辭七七,目前大一,正在学习C/C++,Java,Python等 作者主页: 七七的个人主页 文章收录专栏: 七七的闲谈 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖 所有平台的 MySQL 下载地址为:MYSQL下载网址挑选你需要的 MySQL Community Server 版本及对应的平台。 注意: 安装过程

    2024年02月11日
    浏览(29)
  • 深入理解Linux内核网络——内核与用户进程协作之同步阻塞方案(BIO)

    系列文章: 深入理解Linux网络——内核是如何接收到网络包的 深入理解Linux网络——内核与用户进程协作之同步阻塞方案(BIO) 深入理解Linux网络——内核与用户进程协作之多路复用方案(epoll) 深入理解Linux网络——内核是如何发送网络包的 深入理解Linux网络——本机网络

    2024年02月13日
    浏览(36)
  • 【Linux学习】多线程——同步 | 条件变量 | 基于阻塞队列的生产者消费者模型

    🐱作者:一只大喵咪1201 🐱专栏:《Linux学习》 🔥格言: 你只管努力,剩下的交给时间! 以生活中消费者生产者为例: 生活中,我们大部分人都扮演着消费者的角色,会经常在超市买东西,比如买方便面,而超市的方便面是由供应商生成的。所以我们就是消费者,供应商

    2024年02月05日
    浏览(37)
  • 介绍我的mac上的五种GPT使用方式

    数了一下,现在我的mac上已经有5种可以使用GPT对话的工具了。 - openai官网 - new bing官网 - chat mac桌面 - app goland gpt插件 - 控制台工具 openai的官网就是最正常的入口,就是正常的登录访问。 new bing是微软推出的,虽然听说有的人很难排队,但是昨天我用日本的vpn排队基本秒过。

    2023年04月08日
    浏览(27)
  • 异步非阻塞事件驱动架构的具体流程解析

    异步非阻塞事件驱动架构是一种高效的编程和系统设计模式,特别适用于需要处理大量并发连接和请求的应用,如Web服务器。 1. 初始化和启动 启动过程 :当Nginx启动时,它的主进程初始化配置并启动多个工作进程。 工作进程创建 :这些工作进程独立于主进程,每个进程都能

    2024年01月22日
    浏览(27)
  • clickhouse(十四、分布式DDL阻塞及同步阻塞问题)

    在clickhouse 集群的操作中,如果同时执行一些重量级变更语句,往往会引起阻塞。 一般是由于节点堆积过多耗时的ddl。然后抛出如下异常 1.查询zookeeper的队列数,节点完成情况。 2.查询mutations表,改更较重操作一般会在这个表记录。 先看能不能是kill MUTATION ,确定一下是不是

    2024年02月11日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包