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

【Netty】「NIO」(二)阻塞模式阻塞模式

前言 本篇博文是《从0到1学习 Netty》中 NIO 系列的第二篇博文,主要内容是通过 NIO 来理解阻塞模式阻塞模式,往期系列文章请访问博主的 Netty 专栏,博文中的所有代码全部收集在博主的...因此,对于高并发应用程序,通常使用阻塞和异步 I/O 模式来提高性能。 阻塞模式 在 Java NIO 中,阻塞模式是一种非常重要的概念。...阻塞 I/O(NIO)解决了这个问题,因为它允许应用程序异步地处理多个通道。在阻塞模式下,当一个线程向通道发出请求并没有立即得到响应时,该线程可以继续处理其他任务。...,因此不适合长连接,只适合短连接; 阻塞模式 可以通过 ServerSocketChannel 的 configureBlocking(false) 方法将获得连接设置为阻塞的。...以上就是 阻塞模式阻塞模式 的所有内容了,希望本篇博文对大家有所帮助!

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

    同步异步,阻塞阻塞

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

    3.2K60

    同步、异步、阻塞阻塞

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

    3K40

    阻塞 & 阻塞 | 同步 & 异步

    这里讲的都是基于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模型 阻塞阻塞: 多路IO复用 信号驱动: 这里就完全放飞自我了 异步: ---- Reactor反应堆模型 One loop per thread

    2.9K10

    同步、异步、阻塞阻塞

    socket接收数据的另外一个函数recv则是一个阻塞调用的例子。当socket工作在阻塞模式的时候,如果没有数据的情况下调用该函数,则当前线程就会被挂起,直到有数据为止。...阻塞 阻塞阻塞的概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。...对象的阻塞模式阻塞函数调用 对象是否处于阻塞模式和函数是不是阻塞调用有很强的相关性,但是并不是一一对应的。...阻塞对象上可以有阻塞的调用方式,我们可以通过一定的API去轮询状态,在适当的时候调用阻塞函数,就可以避免阻塞。而对于阻塞对象,调用特殊的函数也可以进入阻塞调用。...阻塞/阻塞则是小明的等待方式,或者说 API 调用者的等待方式。 在不同的场景下,同步/异步、阻塞/阻塞的四种组合都有应用。

    2.2K50

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

    :对于阻塞模式的socket send函数将不返回直到系统缓冲区有足够的空间把你要发送的数据Copy过去以后才返回,而对于阻塞的socket来说send会立即返回WSAEWOULDDBLOCK告诉调用者说...:耗费着系统资源….对于阻塞模式的socket该函数会马上返回,然后告诉你:WSAEWOULDDBLOCK—“现在没有数据,回头在来看看” 扩展: 在进行网络编程时,我们常常见到同步、异步、阻塞阻塞四种调用方式...阻塞 阻塞阻塞的概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。...对象的阻塞模式阻塞函数调用 对象是否处于阻塞模式和函数是不是阻塞调用有很强的相关性,但是并不是一一对应的。...阻塞对象上可以有阻塞的调用方式,我们可以通过一定的API去轮询状态,在适当的时候调用阻塞函数,就可以避免阻塞。而对于阻塞对象,调用特殊的函数也可以进入阻塞调用。

    2.3K20

    阻塞队列与阻塞队列

    Java提供两种方式来实现阻塞式和阻塞式,阻塞式使用锁实现,阻塞式使用CAS方式实现。使用阻塞队列和阻塞队列的场景还有很多,比较常用的就是我们常说的生产者\消费者模型。...阻塞队列 ConcurrentLinkedQueue——无界阻塞队列 ? ?...SynchronousQueue是使用阻塞队列实现的同步队列,分为公平模式和非公平模式,SynchronousQueue本身不存储任何元素,需要保证消费者和生产者的线程以类似于同步的方式进行信息的传递。...阻塞队列是一种线程安全的队列,支持在并发环境下对队列的入队和出队操作,适用于生产者与消费者模式,入队线程就是生产者,出队线程就是消费者。...双端阻塞队列适用于工作密取模式,工作密取也是一种生产者\消费者模型,每个消费者都有自己的双端队列,当自己的队列完成之后,会从其他消费者的双端队列的尾部(正常消费是从队列的头部)进行消费,这样减少竞争关系

    3.1K30

    阻塞阻塞的实现

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

    2.2K20

    同步异步阻塞阻塞详解

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

    2K50

    同步、异步与阻塞阻塞

    阻塞阻塞   阻塞阻塞关注的是程序在等待调用结果(消息,返回值)时的状态。   阻塞调用是指调用结果返回之前,当前线程会被挂起,调用线程只有在得到结果之后才会返回。   ...阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。   ...还是上面的例子:   你打电话问书店老板有没有《分布式系统》这本书,你如果是阻塞调用,你会一直把自己挂起,直到得到这本书有没有的结果,如果是非阻塞调用   你不管老板有没有告诉你,你自己先一边去玩了,当然你也要偶尔过几分钟...阻塞阻塞与是否同步异步无关。 总结: 阻塞:进程给CPU传达一个任务之后,一直在等待CPU处理完成,然后才执行后边的操作。   ...阻塞:进程给CPU传达一个任务之后,继续处理后续的操作,隔段时间再来询问之前的操作是否完成,这样的机制也叫轮询。

    2.1K20

    浅析同步异步阻塞阻塞

    阻塞阻塞调用是指调用结果返回之前,当前线程会被挂起,一直处于等待消息通知,不能够执行其他业务。 阻塞阻塞调用是指调用结果返回之前,当前线程不会被挂起,能够执行其他业务。...阻塞阻塞是与线程相关的,阻塞阻塞是等待消息通知时的状态角度来说的。 同步依赖消息的同步返回,异步是通过状态,回调和通知的方式实现的。...Linux五种IO模型: 从根本上讲I/O操作分为两部分,用户层API调用(内核);内核层完成系统调用(发起I/O请求) 所以“异步/同步”的是指API调用;“阻塞/阻塞”是指内核完成I/O调用的模式...同步阻塞(NIO):是用户层的读或写的请求转换成内核的I/O请求,用户层同步,内核I/O阻塞(读到返回字节,读不到返回-1)。...信号驱动式IO:为异步阻塞的一种,把上述的订阅I/O事件,转换成用信号驱动的方式实现。 异步阻塞(AIO):用户层的读或写的请求转换成内核的I/O请求,用户层异步,内核I/O阻塞

    2K80

    同步异步与阻塞阻塞

    如果你是个研发,同步、异步、阻塞阻塞(还有IO多路复用)这些概念应该不陌生了。但是很多人却没有真正搞懂他们的含义,甚至经常把他们混淆了。 先上几个错误的表达提提神: 阻塞IO模型是异步IO。...第一个表达,“阻塞IO模型是异步IO” 的说法是错误的,在UNP一书中有介绍,那么“阻塞IO模型是同步IO模型”正确么?从《Unix网络编程》6.2节中的描述来看,是正确的。...在Unix网络编程中,可以通过fcntl或者ioctl将socket套接字设置为阻塞模式,该套接字字上的操作就会编程阻塞IO操作。...看起来跟阻塞IO操作的概念没什么不同,其实不然。异步IO操作是:只要把request加入到队列中就返回。和阻塞IO操作不同的是,异步操作连描述符是否准备好也不需要去检查。...阻塞阻塞关注的是最终结果是否返回了。 阻塞就是:我告诉你我要做什么,如果现在能做,那就做完再返回;如果现在还做不了,你也给我个信儿,跟我说这事儿还做不了。

    1.9K230

    Java网络编程——NIO的阻塞IO模式阻塞IO模式、IO多路复用模式的使用

    NIO虽然称为Non-Blocking IO(阻塞IO),但它支持阻塞IO、阻塞IO和IO多路复用模式这几种方式的使用。...但是在客户端有就绪事件,处理客户端的请求时,比如服务端接收客户端连接请求的过程、服务端读取数据(数据拷贝)的过程,是阻塞的。 IO多路复用模式 看完NIO阻塞模式的使用方法你是不是就觉得万无一失了?...有,那就是IO多路复用模式,相对于上面的阻塞模式,IO多路复用模式主要是引入了Selector选择器,且需要把Channel设置为阻塞模式(默认是阻塞的)。...,初始化完ServerSocketChannel后,手动设置了ServerSocketChannel的阻塞模式阻塞,并且为ServerSocketChannel在Selector上注册了一个ACCEPT...---- 转载请注明出处——胡玉洋 《Java网络编程——NIO的阻塞IO模式阻塞IO模式、IO多路复用模式的使用》

    50710
    领券