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

阻塞阻塞实现

我们可能都已经听过阻塞阻塞概念,本文以tcp中connect系统调用为例子(基于1.12.13内核,新版原理类似,但是过程就很复杂了,有时间再分析),分析阻塞阻塞是什么并且看他是如何实现。...sync包,然后根据socket属性(阻塞阻塞,可以通过setsocketopt设置)做下一步处理,如果是非阻塞,那么就比较简单,直接返回给应用层。...这也是非阻塞+事件驱动架构中做法。因为这种架构下通常是单进程,要避免阻塞进程,那么返回后什么时候才能知道连接成功呢?...这就是epoll提供机制,当连接成功后,tcp层会通知epoll,epoll就会通知应用层。下面我们继续分析阻塞过程,interruptible_sleep_on(sk->sleep)。...另外我们看到,这里这是修改进程为可执行状态,但是不会立刻调度,要等下一次进程调度时候才发生进程调度。以上就是进程阻塞阻塞原理。

2.2K20

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

send做工作其实只是把数据传输(Copy)到TCP/IP协议栈输出缓冲区,它执行成功并不代表数据已经成功发送出去了,如果TCP/IP协议栈没有足够可用缓冲区来保存你Copy过来数据的话…这时候就体现出阻塞阻塞不同之处了...:对于阻塞模式socket send函数将不返回直到系统缓冲区有足够空间把你要发送数据Copy过去以后才返回,而对于阻塞socket来说send会立即返回WSAEWOULDDBLOCK告诉调用者说...:耗费着系统资源….对于阻塞模式socket该函数会马上返回,然后告诉你:WSAEWOULDDBLOCK—“现在没有数据,回头在来看看” 扩展: 在进行网络编程时,我们常常见到同步、异步、阻塞阻塞四种调用方式...阻塞 阻塞阻塞概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。...阻塞对象上可以有阻塞调用方式,我们可以通过一定API去轮询状态,在适当时候调用阻塞函数,就可以避免阻塞。而对于阻塞对象,调用特殊函数也可以进入阻塞调用。

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

    同步、异步、阻塞阻塞

    阻塞阻塞   应用进程请求I/O操作时,如果数据未准备好,如果请求立即返回就是非阻塞,不立即返回就是阻塞。简单说就是做一件事如果不能立即获得返回,需要等待,就是阻塞,否则就可以理解为阻塞。...socket接收数据另外一个函数recv则是一个阻塞调用例子。当socket工作在阻塞模式时候, 如果没有数据情况下调用该函数,则当前线程就会被挂起,直到有数据为止。...阻塞 阻塞阻塞概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。...同步/异步与阻塞/阻塞组合 同步阻塞形式: 等待执行结果是一直等待,执行时线程挂起(未对fd 设置O_NONBLOCK 标志位read/write 操作) 同步阻塞形式:等待执行结果是一直等待,...异步阻塞形式:在处理消息是不等待,在执行消息是也不等待。

    3K40

    同步异步,阻塞阻塞

    什么是阻塞阻塞 阻塞阻塞是针对于进程在访问数据时候,根据IO操作就绪状态来采取不同方式,阻塞方式下读取或者写入函数将一直等待,而非阻塞方式下,读取或者写入函数会立即返回一个状态值。...同步/异步与阻塞/阻塞区别 同步与异步:针对数据访问方式,程序是主动去询问操作系统数据准备好了么,还是操作系统在数据准备好时候通知程序。...阻塞阻塞:针对函数(程序)运行方式,在IO未就绪时,是等待就绪还是直接返回(执行别的操作)。...阻塞阻塞区别: 阻塞是程序在调用系统函数IO时,在系统执行系统调用时由CPU通过轮询等方式来实现数据IO。 阻塞是在程序级别通过轮询/信号/事件机制,去查看IO数据是否就绪。...IO多路复用,同步,异步,阻塞阻塞 区别 关于异步,同步,阻塞阻塞 解读I/O多路复用技术

    3.2K60

    阻塞 & 阻塞 | 同步 & 异步

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

    2.9K10

    同步、异步、阻塞阻塞

    阻塞 阻塞阻塞概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。...阻塞对象上可以有阻塞调用方式,我们可以通过一定API去轮询状态,在适当时候调用阻塞函数,就可以避免阻塞。而对于阻塞对象,调用特殊函数也可以进入阻塞调用。...不过小明仍然一直等待“叮”声音(看起来很傻,不是吗)最蠢 异步阻塞:仍然是那个会“叮”一声下载软件,小明提交下载任务后就去干别的,听到“叮”一声就知道完成了。...(最机智) 也就是说,同步/异步是下载软件通知方式,或者说 API 被调用者通知方式。阻塞/阻塞则是小明等待方式,或者说 API 调用者等待方式。...在不同场景下,同步/异步、阻塞/阻塞四种组合都有应用。

    2.2K50

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

    同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和阻塞(non-blocking)IO分别是什么,到底有什么区别?...这其实是因为不同的人知识背景不同,并且在讨论这个问题时候上下文(context)也不相同。所以,为了更好回答这个问题,我先限定一下本文上下文。...Stevens文风是有名深入浅出,所以不用担心看不懂。本文中流程图也是截取自参考文献。...对于network io来说,很多时候数据在一开始还没有到达(比如,还没有收到一个完整UDP包),这个时候kernel就要等待足够数据到来。而在用户进程这边,整个进程会被阻塞。...synchronous IO做”IO operation”时候会将process阻塞

    2.2K10

    阻塞队列与阻塞队列

    Java提供两种方式来实现阻塞式和阻塞式,阻塞式使用锁实现,阻塞式使用CAS方式实现。使用阻塞队列和阻塞队列场景还有很多,比较常用就是我们常说生产者\消费者模型。...阻塞队列 ConcurrentLinkedQueue——无界阻塞队列 ? ?...阻塞队列 Java提供了一个阻塞队列接口——BlockingQueue,在队列基础上增加可阻塞添加元素和可阻塞获取元素方法。 ? ?...,当有入队时则会唤醒阻塞出队操作线程;当队列满时,进行入队操作线程将被阻塞,当有出队时则会唤醒阻塞入队操作线程。...当队列为空(或队列为满)时,消费者(或生产者)线程会进入阻塞状态,使用线程阻塞/通知模型,来通知阻塞线程。

    3.1K30

    同步、异步、阻塞阻塞

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

    2.2K40

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

    中途正好讨论了网络IO同步、异步、阻塞阻塞概念,当时讲下来,大家理解各不相同,各执己见。搜索了网络上一些文章,观点也各不相同,甚至连wiki也将异步和阻塞当成一个概念在解释。...虽然网络上充斥了大量关于同步、异步、阻塞阻塞文章,但大都是抄来抄去,没有一个权威说法。...这样,同步和异步概念就非常明显了。以上五种IO模型,前面四种都是同步,只有第五种IO模型才是异步IO。 阻塞阻塞 那么阻塞阻塞呢?注意到以上五个模型。...阻塞IO,阻塞IO,只是上面的五个模型中两个。阻塞阻塞,是针对单个进程而言。 当对多路复用IO进行调用时,比如使用poll。...这就要看fd状态了,如果fd被设置成了阻塞,那么此时read就是非阻塞;如果fd被设置成了阻塞,那么此时read就是阻塞

    87340

    同步异步阻塞阻塞详解

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

    2K50

    阻塞IO

    本文分享是非阻塞IO,其中包括fcntl函数,然后简单代码实现轮询标志输入输出。 fcntl函数 fcntl函数是一个用于控制文件描述符系统调用,一个文件描述符, 默认都是阻塞IO。...传入cmd值不同, 后面追加参数也不相同,fcntl函数有5种功能: 复制一个现有的描述符(cmd=F_DUPFD):该命令会复制一个文件描述符,并返回复制后文件描述符。...用第三种功能, 获取/设置文件状态标记, 就可以将一个文件描述符设置为阻塞。...在阻塞情况下读取数据,如果数据没有就绪,系统是以出错形式返回(但并非出错),因此在次情况下,没有就绪和出错,使用是相同方式去标识。可以使用errno来区分,究竟是没有就绪还是出错。...使用代码简单实现阻塞 #include #include #include #include #include<errno.h

    19330

    阻塞recvfrom设置

    我不想用阻塞模式,据说比较耗资源。...如果设置为阻塞模式,能很好解决这个问题,我们可以这样来设置阻塞模式:调用 ioctlsocket 函数: unsigned long flag=1; if (ioctlsocket(sock,FIONBIO...支持下列命令: FIONBIO :允许或禁止套接口 s 阻塞模式。 argp 指向一个无符号长整型。如允许阻塞模式则零,如禁止阻塞模式则为零。...当创建一个套接口时,它就处于阻塞模式(也就是说阻塞模式被禁止)。这与 BSD 套接口是一致。 WSAAsynSelect() 函数将套接口自动设置为阻塞模式。...如果对 Connect 进行阻塞调用,则可读意味着已经成功连接,连接不成功则不可读。所以通过这样设定,我们就能够实现对 connect 连接时间修改。

    1.9K20

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

    中途正好讨论了网络IO同步、异步、阻塞阻塞概念,当时讲下来,大家理解各不相同,各执己见。搜索了网络上一些文章,观点也各不相同,甚至连wiki也将异步和阻塞当成一个概念在解释。...虽然网络上充斥了大量关于同步、异步、阻塞阻塞文章,但大都是抄来抄去,没有一个权威说法。...这样,同步和异步概念就非常明显了。以上五种IO模型,前面四种都是同步,只有第五种IO模型才是异步IO。 阻塞阻塞 那么阻塞阻塞呢?注意到以上五个模型。...阻塞IO,阻塞IO,只是上面的五个模型中两个。阻塞阻塞,是针对单个进程而言。 当对多路复用IO进行调用时,比如使用poll。...这就要看fd状态了,如果fd被设置成了阻塞,那么此时read就是非阻塞;如果fd被设置成了阻塞,那么此时read就是阻塞

    800100

    异步,同步,阻塞阻塞程序实现

    同步: 线程 ----我主动来拿结果----> 函数 异步: 线程 <---你把结果拿给我---- 函数 阻塞阻塞 阻塞阻塞差异,在于线程调用函数时候,线程状态。...线程在同步调用下,也能阻塞(同步轮循阻塞函数状态),在异步下,也能阻塞(调用一个阻塞函数,然后在函数中调用回调,虽然没有什么意义)。 下面,我会慢慢实现一个异步阻塞sleep。...在web项目中,这是很可怕。所以我们需要引入阻塞阻塞就是为了让一个响应操作,不影响另一个响应。否则,当A用户在访问某个耗时巨大网页时,B用户只能对着白板发呆。...那么,我们该如何实现自己阻塞sleep呢。 (tornadosleep,原理十分复杂。以后再细说。) 场景二:轮循阻塞 实现阻塞场景,关键在于函数不能阻塞住当前线程。...场景三:异步阻塞 实现异步经典方式是使用回调,实现阻塞经典方式是使用线程。 所以,代码就呼之欲出了。

    7.6K10

    同步、异步与阻塞阻塞

    总结: 同步和异步针对应用程序来说,关注是程序中间协作关系。   同步:执行一个操作之后,等待结果,然后才继续执行后续操作。   ...异步:执行一个操作之后,可以去执行其他操作,然后等待通知再回来执行刚才没执行完操作。 1. 阻塞阻塞   阻塞阻塞关注是程序在等待调用结果(消息,返回值)时状态。   ...阻塞调用是指调用结果返回之前,当前线程会被挂起,调用线程只有在得到结果之后才会返回。   阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。   ...阻塞阻塞与是否同步异步无关。 总结: 阻塞:进程给CPU传达一个任务之后,一直在等待CPU处理完成,然后才执行后边操作。   ...阻塞:进程给CPU传达一个任务之后,继续处理后续操作,隔段时间再来询问之前操作是否完成,这样机制也叫轮询。

    2.1K20

    浅析同步异步阻塞阻塞

    关键点: 同步和异步是与进程相关,同步与异步主要是从消息通知机制角度来说阻塞阻塞是与线程相关阻塞阻塞是等待消息通知时状态角度来说。...阻塞依赖消息返回前,线程不会挂起,是激活状态。...同步阻塞(NIO):是用户层读或写请求转换成内核I/O请求,用户层同步,内核I/O阻塞(读到返回字节,读不到返回-1)。...信号驱动式IO:为异步阻塞一种,把上述订阅I/O事件,转换成用信号驱动方式实现。 异步阻塞(AIO):用户层读或写请求转换成内核I/O请求,用户层异步,内核I/O阻塞。...不过这种只是看上去很美,Java里实现方式还是NIO一套东西。 总结:同步和异步仅仅是关注消息如何通知机制,而阻塞阻塞关注是等待消息通知时状态。

    2K80

    同步异步与阻塞阻塞

    如果你是个研发,同步、异步、阻塞阻塞(还有IO多路复用)这些概念应该不陌生了。但是很多人却没有真正搞懂他们含义,甚至经常把他们混淆了。 先上几个错误表达提提神: 阻塞IO模型是异步IO。...第一个表达,“阻塞IO模型是异步IO” 说法是错误,在UNP一书中有介绍,那么“阻塞IO模型是同步IO模型”正确么?从《Unix网络编程》6.2节中描述来看,是正确。...在Unix网络编程中,可以通过fcntl或者ioctl将socket套接字设置为阻塞模式,该套接字字上操作就会编程阻塞IO操作。...进程同步与线程同步 谈到(并发)服务器编程时,经常会听到进程同步,线程同步等概念。这里同步和同步IO中同步是较大区别的。...进程同步 临界资源(临界区): 一次只能允许一个进程使用共享资源 进程同步:为完成某种任务而建立多个进程需要协调它们工作流程,以保证对临界资源有序访问。确保不会互相干扰。

    1.9K230
    领券