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

socket阻塞与非阻塞同步与异步、IO模型

小结一同步,就是我客户端(c端调用者)调用一个功能,该功能没有结束前,我(c端调用者)死等结果。...在阻塞模式,多线程往往能提高系统吞吐量,因为一个线程阻塞时还有其他线程在工作,多线程可以让CPU 资源不被阻塞中的线程浪费。而在非阻塞模式,线程不会被I/O 阻塞,永远在利用CPU。...二、Linux的五种I/O模型: 1)阻塞I/O(blocking I/O) 2)非阻塞I/O (nonblocking I/O) 3) I/O复用(select 和poll) (I/O multiplexing...Linux的函数是:fcntl()。 套接字设置为非阻塞模式后,在调用Windows Sockets API函数时,调用函数会立即返回。...通常情况,可考虑使用套接字的“I/O模型”,它有助于应用程序通过异步方式,同时对一个或多个套接字的通信加以管理。

2.7K30

socket阻塞与非阻塞同步与异步、IO模型

Linux的五种I/O模型 1)阻塞I/O(blocking I/O) 2)非阻塞I/O (nonblocking I/O) 3) I/O复用(select 和poll) (I/O multiplexing...当使用“生产者-消费者”模型开发网络程序时,为每个套接字都分别分配一个读线程、一个处理数据线程和一个用于同步的事件,那么这样无疑加大系统的开销。...Linux的函数是:fcntl(). 套接字设置为非阻塞模式后,在调用Windows Sockets API函数时,调用函数会立即返回。...通常情况,可考虑使用套接字的“I/O模型”,它有助于应用程序通过异步方式,同时对一个或多个套接字的通信加以管理。...在现在的Linux内核里有都能够支持,其中epoll是Linux所特有,而select则应该是POSIX所规定,一般操作系统均有实现 select: select本质上是通过设置或者检查存放fd标志位的数据结构来进行下一步处理

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

    聊聊同步与异步、阻塞与非阻塞、IO模型

    引言 在面试中我们会碰到这种场景: 面试官:能解释什么是同步,异步么?...程序员:假如我们执行A,B两个IO操作的时候,如果必须等待A完成后才能执行B那么这个就是 同步的,如果A,B可以同时执行那么就是异步的。 面试官:那能解释什么是阻塞什么是非阻塞么?...阻塞型 ? 同步阻塞IO模型 描述: 同步阻塞IO模型是最简单的IO模型,用户线程在内核进行IO操作时被阻塞 用户线程通过系统调用read发起IO读操作,由用户空间转到内核空间。...同步体现在:等待下载完成通知; 阻塞体现在:等待下载完成通知过程中,不能做其他任务处理; 2. 非阻塞型 ? 同步阻塞IO模型 描述: 用户线程发起IO请求时立即返回。...五种I/O模型区别 I/O模型的具体实现 主要实现方式有以下几种: Select:Linux实现对应,I/O复用模型,BSD4.2最早实现(apache) Poll:Linux实现,对应I/O复用模型

    1.2K10

    socket阻塞与非阻塞同步与异步IO模型

    Linux的五种I/O模型 1)阻塞I/O(blocking I/O) 2)非阻塞I/O (nonblocking I/O) 3) I/O复用(select 和poll) (I/O multiplexing...当使用“生产者-消费者”模型开发网络程序时,为每个套接字都分别分配一个读线程、一个处理数据线程和一个用于同步的事件,那么这样无疑加大系统的开销。...Linux的函数是:fcntl().     套接字设置为非阻塞模式后,在调用Windows Sockets API函数时,调用函数会立即返回。...通常情况,可考虑使用套接字的“I/O模型”,它有助于应用程序通过异步方式,同时对一个或多个套接字的通信加以管理。...同步IO引起进程阻塞,直至IO操作完成。 异步IO不会引起进程阻塞。 IO复用是先通过select调用阻塞。 5个I/O模型的比较: ?

    3.2K10

    同步、异步、阻塞、非阻塞

    同步与异步 同步与异步是针对应用程序与内核的交互而言的。同步过程中进程触发IO操作并等待或者轮询的去查看IO操作是否完成。...同步 同步的思想是:所有的操作都做完,才返回给用户。这样用户在线等待的时间太长,给用户一种卡死了的感觉(就是系统迁移中,点击了迁移,界面就不动了,但是程序还在执行,卡死了的感觉)。...这种情况,用户不能关闭界面,如果关闭了,即迁移程序就中断了。同步,是所有的操作都做完,才返回给用户结果。即写完数据库之后,在相应用户,用户体验不好。...阻塞 阻塞调用是指调用结果返回之前,当前线程会被挂起。函数只有在得到结果之后才会返回。有人也许会把阻塞调用和同步调用等同起来,实际上它们是不同的。...同步/异步与阻塞/非阻塞的组合 同步阻塞形式: 等待执行结果是一直等待,执行时线程挂起(未对fd 设置O_NONBLOCK 标志位的read/write 操作) 同步阻塞形式:等待执行结果是一直等待,

    3K40

    一种理解同步异步,阻塞阻塞Linux IO 模型,select poll epoll 的方法

    同步(synchronous)/异步(asynchronous),阻塞(blocking)/非阻塞(non-blocking),阻塞IO/非阻塞IO/同步IO/异步IO/IO复用(IO Multiplexing...同步/异步与阻塞/非阻塞的理解 线程是程序执行中一个单一的顺序控制流程,是程序执行流的最小单元,是处理器调度和分派的基本单位。用线程执行程序流的过程去理解同步异步,阻塞阻塞。...Linux的五种IO模型 上一节中对同步/异步,阻塞/非阻塞的描述只能说能够恰好区分它们,如果不是在计算机领域而是生活中,道理也类似。...然而计算机中的某些专业术语又需要放在专门的情景中去看,例如下面将要提到的Linux IO模型,建议理解模型本身,而不是抠同步/异步与阻塞阻塞的字眼,因为会发现就算是非阻塞模型也有阻塞的部分,同步IO与异步...IO模型 用IO操作中有阻塞来判断,5种IO模型中4种属于同步IO,分别是阻塞IO模型,非阻塞IO模型,IO复用模型,信号驱动IO模型

    6.9K10

    同步异步,阻塞阻塞

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

    3.2K60

    阻塞 & 非阻塞 | 同步 & 异步

    这里讲的都是基于IO的 阻塞、非阻塞同步、异步 ---- 一个典型的IO操作包括了两个阶段,数据准备和数据读写。比如说现在要使用 recv 执行一个读操作,数据就绪就是远端是否有数据可读。...当IO工作在阻塞状态的时候,如果数据没有就绪,recv就会阻塞当前线程;如果说IO工作在非阻塞状态,会立即返回。...一个同步IO接口的示例: char buf[1024]; int sz = recv(sockfd,buf,1024,0); //阻塞:一直在这儿死等 //非阻塞:时不时的回来问一 if(sz>0)...仅被 lio_listio() 函数使用 */ /* Various implementation-internal fields not shown */ }; 陈硕大神说:在处理IO的时候,阻塞和非阻塞都是同步...---- 五种IO模型 阻塞: 非阻塞: 多路IO复用 信号驱动: 这里就完全放飞自我了 异步: ---- Reactor反应堆模型 One loop per thread

    2.9K10

    同步、异步、阻塞、非阻塞

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

    2.2K50

    理解一5种IO模型阻塞IO和非阻塞IO、同步IO和异步IO

    本文是在《UNIX网络编程 卷1:套接字联网API》6.2节"I/O 模型 "的基础上,即UNIX/LINUX环境的网络 IO环境的理解,它里面给出的例子是读取(接收)网络UDP数据。...下面这样些图,是它里面给出的例子:接收网络UDP数据的流程在IO模型的分析,在它的基础上再加以简单描述,以区分这些IO模型。...,Linux2.6后内核支持; 2-4、信号驱动IO模型 ?...这不是很好理解,我们来扩展一,先说说同步和异步,同步和异步关注的是双方的消息通信机制: 同步:双方的动作是经过双方协调的,步调一致的。 异步:双方并不需要协调,都可以随意进行各自的操作。...所以, 阻塞IO模型、非阻塞IO模型、IO复用模型、信号驱动的IO模型者为同步IO模型,只有异步IO模型是异步IO。 END 我知道你 “在看”

    33.4K71

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

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

    2.2K40

    同步异步阻塞阻塞详解

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

    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

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

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

    69031

    同步、异步与阻塞、非阻塞

    同步与异步   同步和异步关注的是消息通信机制。同步就是在发出一个【调用】时,在没有拿到结果之前,该【调用】就不返回,但是一旦调用返回,就得到返回值了。   ...举个例子:   你打电话问书店老板有没有《分布式系统》这本书,如果是同步通信机制,书店老板会说,你稍等一,我查一,然后开始查啊查,等查好了(可能是   5秒,也可能是一天)告诉你结果(返回结果)。...总结: 同步和异步针对应用程序来说,关注的是程序中间的协作关系。   同步:执行一个操作之后,等待结果,然后才继续执行后续的操作。   ...check一老板有没有返回结果。   ...阻塞与非阻塞与是否同步异步无关。 总结: 阻塞:进程给CPU传达一个任务之后,一直在等待CPU处理完成,然后才执行后边的操作。

    2.1K20

    浅析同步异步阻塞阻塞

    关键点: 同步和异步是与进程相关的,同步与异步主要是从消息通知机制角度来说的。阻塞和非阻塞是与线程相关的,阻塞阻塞是等待消息通知时的状态角度来说的。...同步依赖消息的同步返回,异步是通过状态,回调和通知的方式实现的。 阻塞依赖消息返回前线程挂起,不能执行其余的业务(同步只是逻辑上函数没返回,可以执行一些其余操作的)。...Linux五种IO模型: 从根本上讲I/O操作分为两部分,用户层API调用(内核);内核层完成系统调用(发起I/O请求) 所以“异步/同步”的是指API调用;“阻塞/非阻塞”是指内核完成I/O调用的模式...同步阻塞(NIO):是用户层的读或写的请求转换成内核的I/O请求,用户层同步,内核I/O非阻塞(读到返回字节,读不到返回-1)。...也就是说,同步的情况,是由处理消息者自己去等待消息是否被触发,而异步的情况是由触发机制来通知处理消息者。

    2K80

    同步异步与阻塞阻塞

    | 导语 同步异步与阻塞阻塞是开发中经常碰到的概念,但是很多人都没理解清楚,或者混淆了它们的概念。最近看了一些材料,发现以前很多理解都是错的,所以重新整理了一。...IO多路复用模型是异步IO。 第一个表达,“非阻塞IO模型是异步IO” 的说法是错误的,在UNP一书中有介绍,那么“非阻塞IO模型同步IO模型”正确么?...I/O模型同步I/O模型”,我觉得翻译成“基于同步I/O的模型”,或者直接说它是同步的更好一点 。...我们通常使用的网络IO操作,基本上都是同步IO操作,不管它是阻塞的还是非阻塞的。 IO模型 关于IO模型,UNP 6.2节 有列举了常见的五中IO模型。...阻塞I/O模型阻塞I/O模型 I/O多路复用模型 信号驱动I/O模型 异步I/O模型 关于这五种模型各自的含义,UNP中有比较详细的描述了。 这里要注意,讨论的范围是模型,而不是IO操作。

    1.9K230

    同步、异步与阻塞、非阻塞

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

    1.5K10

    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
    领券