`
xly_971223
  • 浏览: 1273866 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

阻塞是怎么回事?

阅读更多
java中的io与nio主要区别在于阻塞上
io采用的是阻塞
nio可自定义
阻塞与非阻塞到底有什么不同?其底层是怎么实现的呢?
从内核的角度来理解,就是进程的阻塞 运行状态的切换
阻塞实际上是进程在等待资源,而资源没有就绪(如网卡数据没到来),那么进程就进入阻塞状态。
这个进程什么时候再投入运行呢 ---- 等网卡数据到来时即可继续运行了

阻塞IO的缺点是占用了一个进程,却让这个进程在阻塞队列中睡大觉
好比我请了一个工人干活却因为水泥没到,只好让工人傻等着,还得管吃管住,白白浪费资源

阻塞式IO数量比较少的时候问题不明显,并发稍微大一些系统就吃不消了,如有1000个进程都在阻塞,那么你的机器估计什么都干不了了,资源全浪费了
那位大哥问了,浪费的是什么资源?
是这样的,系统能够创建的进程是有上限的 最大几千个吧
如果有1000个处在阻塞中是不是一种浪费呢
另外就是进程调度,这么多的阻塞进程参与进程调度,会浪费一些时间

======================================

非阻塞进程是怎么工作的呢?
非阻塞进程去读取网卡数据,如果数据没来 则立即返回而不是在那儿傻等
返回后进程可以继续干别的事情,等网卡的数据来了会主动通知进程的
这样就使进程化被动为主动了

非阻塞IO的威力在于作为Server端,接收客户端高并发请求时
只需要启动一个进程即可处理成千上万的客户端请求,充分利用了资源

======================================

网上很多人都说nio提高性能,我个人不太认同
nio只是数据读写的方式与以往不同,数据的传输速度没有任何变化,处理速度也没有变化
如有一个网络数据包在12:00到达网卡,那么它不会因为采用了IO或NIO而改变到达时间
这个数据包处理需要20ms,同样它不会因为采用了IO或NIO而缩短处理时间

NIO只是提高了资源的利用率





0
1
分享到:
评论
2 楼 dimpen 2010-06-30  
如果有很多客户请求,不也就是提高了server端的性能吗
nio提高性能,顶顶顶
1 楼 woniu1983 2010-06-29  
·· 学习了  谢谢博主分享

相关推荐

    setInterval阻塞解决方案完整代码

    前端开发中,我们会会经常使用定时器setinterval setTimeout等,但当我们离开页面时,定时器会被阻塞,导致我们再回到页面的时候定时任务会混乱运行,为些我的解决方案写了个简单demo,希望对你有所帮助

    阻塞线程池 阻塞线程池 阻塞线程池

    阻塞线程池阻塞线程池阻塞线程池阻塞线程池阻塞线程池阻塞线程池阻塞线程池阻塞线程池阻塞线程池阻塞线程池阻塞线程池阻塞线程池阻塞线程池阻塞线程池阻塞线程池阻塞线程池阻塞线程池阻塞线程池阻塞线程池阻塞线程池...

    阻塞通信和非阻塞通信的区别

    阻塞通信和非阻塞通信的区别 阻塞通信和非阻塞通信是两种不同的通信模式,主要应用于Socket通信中。在Java中,通过使用java.nio包中的类可以实现非阻塞通信。 阻塞通信是指在发送或接收数据时,当前线程将被阻塞,...

    C++ socket 阻塞与非阻塞

    本话题主要探讨的是在C++ Socket编程中的阻塞模式与非阻塞模式,以及它们在多线程环境下的应用和资源管理。 一、阻塞与非阻塞模式 1. **阻塞模式**:在阻塞模式下,当一个Socket调用(如recv或send)执行时,如果...

    IO中同步、异步与阻塞、非阻塞的区别

    在软件开发领域,尤其是在涉及输入输出(IO)操作时,理解同步与异步、阻塞与非阻塞的概念是非常重要的。这些概念对于设计和实现高效的程序至关重要,尤其是在高并发和分布式系统中。 一、同步与异步 同步和异步是...

    ProcessBuilder非阻塞是调用

    "ProcessBuilder非阻塞是调用" ProcessBuilder 非阻塞是调用是指在 Java 中使用 ProcessBuilder 类来执行外部命令或程序时,如何实现非阻塞调用。 在 Java 中,使用 ProcessBuilder 类可以执行外部命令或程序,...

    彻底搞定阻塞非阻塞同步异步

    本文档,是我本人翻译的一篇介绍linux系统同步异步阻塞非阻塞的知识的,你在网上看到的百分之八十的知识,可能都以讹传讹,让你看的一知半解,因为网上很多该类博客,没有讲解清楚,举得例子:如老王烧水,小王银行...

    异步 同步 阻塞 非阻塞 的说明_异步同步阻塞非阻塞_

    在计算机编程和系统设计中,异步、同步、阻塞和非阻塞是四个非常重要的概念,它们关乎程序执行效率和资源管理。以下是对这些概念的详细解释。 **同步与异步** 同步(Synchronous)是指一个进程或线程在等待另一个...

    QTcpSocket通信编程时阻塞与非阻塞的问题 - findumars - 博客园1

    在QTcpSocket的编程中,我们经常会遇到阻塞和非阻塞两种模式的选择。这两种模式在处理网络通信时有着不同的行为和应用场景。 首先,阻塞模式意味着在执行某些操作(如连接、读取或写入数据)时,QTcpSocket会暂停...

    Linux UDP socket 设置为的非阻塞模式与阻塞模式区别

    ### Linux UDP Socket 非阻塞模式与阻塞模式的区别详解 #### 一、引言 在进行网络编程时,我们经常会遇到阻塞模式与非阻塞模式的选择问题。这两种模式直接影响程序的运行效率和资源利用率。本文将详细介绍在Linux...

    C++串口通信类(阻塞和非阻塞都支持)

    在这个主题中,我们将深入探讨如何使用C++构建一个支持阻塞和非阻塞模式的串口通信类。 串口通信的基本概念: 串口通信是指通过串行接口进行的数据传输,通常涉及RS-232、RS-485或USB等标准。数据以比特流的形式逐...

    Verilog里阻塞与非阻塞的区别

    Verilog 中的阻塞与非阻塞赋值 Verilog 中的阻塞和非阻塞赋值是两个不同的概念,它们在编程时的使用会产生不同的结果。在本文中,我们将通过两个程序的比较来了解阻塞和非阻塞赋值的区别,并引出相关的知识点。 ...

    同步异步阻塞非阻塞

    同步异步阻塞非阻塞 IO 模型 在 Linux 环境下的网络 IO 中,有五种基本的 IO 模型:阻塞 IO、非阻塞 IO、IO 多路复用、信号驱动 IO 和异步 IO。其中,信号驱动 IO 不常用,因此主要介绍其余四种 IO 模型。 1. 阻塞...

    android开发串口,修改串口为非阻塞模式

    ,不过还有不少的缺陷,缺陷之一是:读取串口信息是阻塞模式,在向串口发出命令后,如果没返回的话,串口将被阻塞 这样,如果在没数据返回的情况,线程将不能安全退出。缺陷之二是:没有停止位、奇偶校验位,停止位...

    深入理解Verilog阻塞非阻塞

    ### 深入理解Verilog中的阻塞与非阻塞赋值 在数字逻辑设计领域,Verilog HDL(硬件描述语言)作为一种重要的工具被广泛应用于集成电路的设计与验证过程中。Verilog的一个显著特点是其能够支持并行语句的执行,这...

    Socket C++ TCP阻塞\非阻塞 服务器 客户端 开发

    ### Socket C++ TCP阻塞与非阻塞服务器客户端开发 #### 概述 本文档将详细介绍如何使用C++ Winsock库来开发TCP非阻塞服务器。通过本篇内容的学习,您将了解到设置socket函数为非阻塞模式的方法,并且能够深入了解...

    非阻塞recvfrom的设置

    非阻塞recvfrom的设置 在网络编程中,recvfrom函数是一个常用的接收数据的函数,但是默认情况下,它是一个阻塞的函数,意味着它会一直等待数据的到来。如果我们想要实现非阻塞的recvfrom函数,需要使用ioctlsocket...

    57丨观察者模式(下):如何实现一个异步非阻塞的EventBus框架?1

    错误处理通常通过异常回调或日志记录来实现,确保即使在处理事件时发生异常,也能正常完成后续操作。 总之,通过构建一个异步非阻塞的EventBus框架,我们可以优雅地解决观察者模式在实际应用中的各种挑战,提高代码...

    阻塞队列阻塞队列阻塞队列

    在Java编程语言中,阻塞队列是一种线程安全的数据结构,它在多线程并发控制中发挥着重要作用。阻塞队列的核心特性是当队列为空时,尝试获取元素的线程会被阻塞,直到其他线程添加元素;同样,当队列满时,试图插入...

    同步、异步、阻塞、非阻塞的区别

    4. **异步非阻塞**:最理想的组合,允许程序在发起一个操作后立即返回,然后在操作完成时通过回调或事件通知调用者。这种方式非常适合高并发环境,如Web服务器、游戏服务器等。 **总结**: - **同步与异步**关注的...

Global site tag (gtag.js) - Google Analytics