`
jokermanager
  • 浏览: 143824 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

阻塞I/O,非阻塞I/O

阅读更多

拿 socket举例。

当read数据时,如果这时没有数据可读,阻塞I/O会一直等待有数据读,数据从kernel copy 到socket的buffer后返回;非阻塞I/O会立即返回,但如果有数据可读,非阻塞I/O也是等数据从kernel copy 到socket的buffer后返回。



以上是阻塞与非阻塞I/O的区别,但以上两个例子的read操作都是同步的,是不是很奇怪?点解称其为同步?看看同步的定义就会很明确:

  • A synchronous I/O operation causes the requesting process to be blocked until that I/O operation completes.

  • An asynchronous I/O operation does not cause the requesting process to be blocked.



现在举一个异步的例子就会很明白了,也是对read这个操作,当有数据可读时,异步I/O立即返回,kernel copy数据到socket buffer后,会以事件等通知程序read操作完成。


关键就在于将数据从kernel copy到socket buffer这段时期,read操作是否阻塞,阻塞I/O是阻塞的,而异步I/O是不阻塞的。

分享到:
评论
3 楼 randyjiawenjie1 2013-12-16  
终于遇到一个人讲清楚了
2 楼 jokermanager 2008-06-28  
1、异步与同步的区别:异步不会引起request进程阻塞。而同步会。

2、阻塞IO一定是同步的。

3、非阻塞IO分为两种:同步和异步的。

4、异步的非阻塞IO在read时,不管有无数据都直接返回。有数据了,会收到kernel copy的事件,来完成读取。

5、同步的非阻塞IO在read时,也是等数据copy完才返回。

6、由于非阻塞request不会一直与response保持连接,这样会降低response端压力,也就提高了并发性。
1 楼 FGhost 2008-06-26  
两个问题:
      1. "read操作是否阻塞,阻塞I/O是阻塞的,而异步I/O是不阻塞的" --阻塞是在等待,那不阻塞呢? 如果不是在等是在做什么?不是一样要等到kernel copy数据到socket buffer。
      2。非阻塞 是怎么提高并发的?

相关推荐

    java阻塞i/o与非阻塞i/o控制

    对于高效的系统设计,理解并掌握阻塞I/O和非阻塞I/O是非常重要的。这两种I/O模型在处理数据传输时有着显著的区别,对程序性能和并发性有着深远的影响。 **阻塞I/O(Blocking I/O)** 阻塞I/O模型是最常见的I/O模式...

    linux 设备驱动中的阻塞与非阻塞 I/O

    然而,使用非阻塞I/O需要应用层代码进行复杂的轮询检查,以确定数据是否已准备好,这可能导致CPU资源的过度消耗。 在Linux设备驱动中,通常需要根据具体应用场景选择合适的I/O模型。例如,对于实时性要求高的系统,...

    Unix I/O 小结

    write系统调用同样需要注意部分写、追加写和非阻塞写的情况。write成功并不意味着数据已立即写入磁盘,而是写入了内核缓存,以提高读写效率。fsync和fdatasync用于强制将内存中的脏数据同步到磁盘,其中fsync还包括...

    windows下六种socket I/O模型示例

    2. **非阻塞I/O(Non-blocking I/O)** 在非阻塞模式下,read或write调用不会挂起进程,而是立即返回一个错误代码。程序员需要自己处理数据未准备好的情况,通常使用循环来检查。 3. **I/O复用(I/O Multiplexing...

    网络编程高级应用 I/O阻塞与非阻塞操作应用

    而非阻塞I/O则允许进程在没有数据可读时立即返回,通常会设置errno为"EAGAIN"来表示尝试读取时没有数据。非阻塞模式适用于需要快速响应或者避免单一任务阻塞整个进程的场景。 在Linux中,非阻塞I/O处理可以通过设置...

    unix平台下I/O聚集和分离的一种方案

    Unix系统提供了多种I/O模型,如阻塞I/O、非阻塞I/O、I/O多路复用(如select、poll、epoll)、信号驱动I/O以及异步I/O。I/O聚集通常指的是在一个系统调用中处理多个文件描述符,而I/O分离则是在不同时间或通过不同...

    异步I/O处理

    非阻塞I/O意味着即使没有数据可读,读取操作也不会挂起;事件驱动则是通过事件回调机制,当某个I/O操作完成时,系统会通知相应的处理函数。这种模型非常适合网络服务、数据库连接等需要频繁进行I/O操作的场景。 在...

    详解socket阻塞与非阻塞,同步与异步、I/O模型

    而Node.js推崇的是非阻塞I/O模型,通过事件驱动和回调函数实现异步操作,以提高系统的并发能力。 总结来说,同步与异步是关于处理结果获取方式的不同策略,而阻塞与非阻塞是关于处理过程中线程状态管理的差异。在...

    Java 新I/O

    5. **非阻塞I/O** 在传统的I/O模型中,读写操作通常是阻塞的,即在等待数据准备好或完成写入时,线程会被挂起。而在NIO中,通道和缓冲区支持非阻塞模式,当数据未准备好时,读写操作不会阻塞,而是立即返回,允许...

    Windows Socket五种I/O模型——代码全攻略

    重叠I/O模型是一种非阻塞I/O模型,通过使用`OVERLAPPED`结构来异步执行I/O操作。这种方式非常适合高并发场景。 **示例代码:** ```c // 创建重叠结构 OVERLAPPED ovl; ZeroMemory(&ovl, sizeof(OVERLAPPED)); // ...

    1_WINSOCK的I/O模型_

    常见的I/O模型有阻塞I/O、非阻塞I/O、I/O多路复用、信号驱动I/O以及异步I/O。在WINSOCK中,这些模型都被支持,并且可以根据应用场景选择合适的模型。 1. **阻塞I/O**:这是最基本的模型,当一个套接字进行读写操作...

    Java I/O, 2nd Edition

    3. **非阻塞I/O(NIO)**:Java NIO在Java 1.4引入,提供了异步I/O操作,可以处理多个连接,而无需为每个连接创建一个新的线程。关键类有Selector、Channel和Buffer,Selector可以监控多个通道的事件,Channel代表I/...

    重叠I/O类 代码

    1. **初始化**:在类的构造函数中,可能包括创建套接字、设置套接字为非阻塞模式,以及配置重叠I/O的初始化工作。可能还会设置`OVERLAPPED`结构体,以及关联事件对象或窗口消息。 2. **接收和发送**:类可能提供了...

    嵌入式Linux下文件I/O

    这可能包括选择合适的I/O模型(同步/异步,阻塞/非阻塞)、减少不必要的系统调用、利用多线程或异步操作等技术。 8. **设备文件和字符/块设备驱动** 在嵌入式Linux中,设备通常以文件形式存在。了解设备文件和如何...

    阻塞IO和非阻塞IO

    根据I/O模型的不同,可以将它们分为两大类:阻塞I/O和非阻塞I/O。这两种I/O模型对于系统的性能有着显著的影响,本文将深入探讨它们的原理、应用场景以及优缺点。 #### 二、阻塞I/O模型 ##### 2.1 定义 阻塞I/O是一...

    后端开发 技术关键词: Node.js与Express框架 内容关键词: 事件驱动的非阻塞I/O

    内容关键词: 事件驱动的非阻塞I/O 用途: 用于构建高性能的服务器端应用程序,支持实时通信和高并发处理。 对资源的描述: Node.js是一个基于Chrome V8引擎的JavaScript运行环境,它使得开发者可以使用JavaScript...

    select I/O模型 客户端

    这意味着开发者还需要配合其他非阻塞I/O技术,如`WSAAsyncSelect`或`WSAEventSelect`(在Winsock中),以实现完整的异步I/O模型。 总结来说,`select` I/O模型在客户端应用中扮演着关键角色,它帮助开发者高效地...

    同步异步阻塞非阻塞I/O思维导图

    同步异步,阻塞非阻塞,I/O学习总结的思维导图,需要结合Richard Stevens的书来学习

    Java I/O, NIO and NIO.2

    非阻塞I/O(Non-blocking I/O),简称NIO,是Java 1.4引入的一个重要特性,主要由java.nio包提供。NIO的核心在于通道(Channels)和缓冲区(Buffers)。通道类似于流,但它们支持非阻塞读写,这意味着当数据不可用时...

    深入分析 Java I/O 的工作机制(转载)

    7. **NIO(非阻塞I/O)** Java 1.4引入了NIO(New I/O)框架,提供了一种更有效率的I/O模型,特别是在多路复用I/O(Selector)方面。NIO允许单线程处理多个通道,提高了服务器端并发性能。 8. **文件操作** Java...

Global site tag (gtag.js) - Google Analytics