`

IO的阻塞、非阻塞、同步、异步

 
阅读更多

伪代码:

void ioTest(){
    // 1
    read(socket, buffer);//这句阻塞,阻塞的情况有两种:1.当socket并没有数据时(等待数据);2.当socket有数据时(激活状态),要经历从socket的buffer读到程序空间的buffer中的时间过程
    // 2
    process(buffer);//这一句的执行必须得等上一句执行返回,因为参数buffer来源于上一句
    // 3
    doOtherNotRelateToTheSocket();//这一句所要执行的内容与socket无关,却还是要收到socket阻塞的影响,因为第一句的执行使整个线程阻塞在那里了。
}
void process(buffer){
    show(buffer.toString());
}

同步: 下一句的执行必须等上一句执行返回,例子中第二句执行的条件需要第一句执行返回;但第三句是与之前语句无关的语句,不应该是同步语句。因此可以通过给同步代码另开线程解决这个问题,即把第一和第二句放到另一个线程去,则doOtherNotRelateToTheSocket()方法不会受到阻塞
阻塞: io上的阻塞(系统调用read()后,马上返回一个状态回用户空间为非阻塞,不马上返回只有等到有数据才返回到用户空间则为阻塞)
这里有一个比较容易混淆的点,似乎阻塞就等于同步,第二第三句都要在第一句执行完后才执行(第二句位置合理,但第三句是不合适的同步)。阻塞是资源上的限制,不可改变,但同步代码可以通过启动多线程达到异步的效果。

 

高性能IO模型浅析

 

-----------------------------------------------------------------------

 

I/O多路复用机制都依赖于一个事件多路分离器(Event Demultiplexer),reactor与proactor模式都具有I/O多路复用的特点,区别只在于reactor属于同步IO,proactor属于异步IO。

proactor的一个重要区别地方: 在分离器等待过程中,操作系统利用并行的内核线程执行实际的读操作,并将结果数据存入用户自定义缓冲区,最后通知事件分离器读操作完成。(异步IO即应用程序操作数据时不需要才开始从IO上读取字节流,而是读取缓冲区上的数据(操作系统已经并行做了这个事情))。

 

reactor和proactor模式

reactor与proactor的概念

分享到:
评论

相关推荐

    网络IO模型:同步IO和异步IO,阻塞IO和非阻塞IO

    网络IO模型:同步IO和异步IO,阻塞IO和非阻塞IO

    网络IO模型:同步IO和异步IO,阻塞IO和非阻塞IO.pdf

    同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出的答案都可能不同,比如wiki,就认为asynchronous IO和non...

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

    本文主要讲了IO中同步、异步与阻塞、非阻塞的区别。希望对你的学习有所帮助。

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

    讲述同步、异步、阻塞、非阻塞的区别,通俗易懂,是我见到的最口语话最清晰的材料,文中比喻恰当,深入浅出。

    JAVA IO同步,异步

    介绍了基于系统底层通信技术socket,JAVA IO同步,异步,阻塞,非阻塞;

    同步与异步--阻塞与非阻塞型IO

    这篇文章里,简单而且形象的介绍了同步于异步——阻塞与非阻塞的知识。希望可以帮助大家

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

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

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

    socket阻塞与非阻塞,同步与异步 1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式: 同步/异步主要针对C端: 同步: 所谓同步,就是在c端发出一个...

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

    很多时候我们常常看到同步与异步,阻塞与非阻塞的出现。有的地方直接将同步与阻塞画上了等号。异步与非阻塞画上了等号。事实上这是不对的。同步不等于阻塞,而异步也不等于非阻塞。下面就来仔细的看看同步与异步、...

    2-Socket阻塞与非阻塞,同步与异步、IO模型-120412发布1

    1. 同步,就是我客户端(c端调用者)调用一个功能,该功能没有结束前,我(c端调用者)死等结果 2. 异步,就是我(c端调用者)调用一个功能,不需要知道该功能结

    Icicle具有协同程序非阻塞IO和多线程的异步库

    Icicle - 具有协同程序,非阻塞I / O和多线程的异步库,一个PHP库,用于使用同步编码技术来编写异步代码

    11.异步IO1

    第十一章 异步 IO这里要说的异步 IO 准确的说应该叫“信号驱动的异步 I/O”,也可以成为异步通知。前面两章说的阻塞和非阻塞 IO,他们都是同步 IO,需要

    Python之进程+线程+协程(异步、selectors模块、阻塞、非阻塞IO)

    本篇文字是关于IO多路复用的更深入一步的总结,上一篇Python之进程+线程+协程(事件驱动模型、IO多路复用、select与epoll)对IO多路复用进行了概念性的分析,本篇则是对阻塞IO、非阻塞IO、与异步进行通俗性的比较和...

    linux io 模型

    linux io模型,区分阻塞非阻塞同步异步的概念,从底层理解io。

    C++ boost::asio编程-同步TCP详解及实例代码

    boost.asio库是一个跨平台的网络及底层IO的C++编程库,它使用现代C++手法实现了统一的异步调用模型。 boost.asio库支持TCP、UDP、ICMP通信协议。 下面介绍同步TCP模式: 大家好!我是同步方式! 我的主要特点...

    高性能IO模型浅析

    (2)同步非阻塞IO(Non-blocking IO):默认创建的socket都是阻塞的,非阻塞IO要求socket被设置为NONBLOCK。注意这里所说的NIO并非Java的NIO(New IO)库。 (3)IO多路复用(IO Multiplexing):即经典的Reactor...

    9.阻塞IO1

    9.1 阻塞和非阻塞、同步和异步与 IO 操作 9.2 阻塞 IO 9.2.1 等待队列 9.3 实验 9.3.1 原理图 9.3.2 设备树 9.3.3 驱动

    异步HttpClient

    主要解决生产环境中同步httpclient造成的IO阻塞问题。同步http请求将导致 tomcat 的业务线程被阻塞。一旦某接口网络出现问题,可能会阻塞tomcat业务线程,从而无法处理正常业务。很多公司使用另开线程池的方式进行...

    使用协同路由的同步异步_Synchronous asynchrony using coroutines_C+

    小型但高效的库,用于以同步方式执行异步操作(“async”->“Synca”)。该方法大大简化了有效IO和CPU密集型应用程序或其他非平凡并发算法的编写。该库演示了如何使用协同例程来实现所描述的简化。...非阻塞异步通道。

    浅谈Node 异步IO和事件循环

    查阅资料的时候, 发现很多人都对 异步和非阻塞 的概念有点混淆, 其实两者是完全不同的, 同步异步指的是 行为即两者之间的关系 , 而阻塞非阻塞指的是 状态即某一方 。 以前端请求为一个例子,下面的代码很多人都...

Global site tag (gtag.js) - Google Analytics