zoukankan      html  css  js  c++  java
  • 20121124.Nodejs异步式I/O与事件式编程

    异步:
    你请人吃饭,准备一起去的。结果那人刚好有事,让你先去点菜,你去点好菜,他忙完就来了,这就是异步的优势(不耽误事!)
    同步:
    就是,你必须等那个人忙完了,才一起去(浪费时间)
    理解来源于群友“老了学nodejs”
     
    1、Nodejs最大的特点就是异步式I/O(或者非阻塞I/O)与事件紧密结合的编程模型。此模型与传统的同步式I/O线性的编程思想有很大不同,因为控制流在很大程度上需要事件和回调函数来组织,一个逻辑要拆分为若干个单元。
     
    2、什么是阻塞式(同步式I/O):
        线程在执行中如果遇到磁盘读写或者网络通信(统称I/O操作),通常要耗费较长时间,这时操作系统会剥夺这个线程对CPU的控制权,使其暂停执行,同时将资源让给其他的工作线程,这种线程调度方式称为阻塞式。
        当I/O操作完毕时候,操作系统将这个线程的阻塞状态解除,恢复其对CPU的控制权,令其继续执行,这种模式就是同步式I/O(Synchronous I/O)或者阻塞式(Blocking I/O)
     
    3、异步式I/O:
        当线程遇到I/O操作时,不会以阻塞的方式等待I/O操作的完成或者数据的返回,而只是将I/O的请求发送给操作系统,继续执行下一条语句。当操作系统完成I/O的操作时,以事件的形式通知执行I/O操作的线程,线程会在特定的时间处理这个事件。
        为了处理异步I/O,线程必须有事件循环,不断的检测有没有未处理的事件,依次予以处理。
     
    4、阻塞模式下一个线程只能处理一项任务,要想提高吞吐量,必须使用多线程。而非阻塞模式下,一个线程永远在执行计算操作,这个线程所使用的CPU核心利用率永远是100%。多线程带来的好处是在多核CPU的情况下利用更多的核,而Nodejs的单线程也能带来同样的好处。
     
    5、单线程事件相比传统的多线程阻塞I/O的优缺点?
        优:多线程的开销,创建一个线程对OS来讲代价还是比较大的(需要分配内存,列入调度、线程切换时内存换页,CPU缓存清理)。
        缺:异步式编程不符合人们对于一般程序的设计思维,容易让流程控制变得隐晦难懂!
     
    6、同步式I/O和异步式I/O特点对比:    
    同步式(I/O)
    异步式(I/O)
    利用多线程提供吞吐量
    单线程即可实现高吞吐量
    通过事件片分割和线程调度利用多核CPU
    通过功能划分利用多核CPU
    需要由操作系统调度多线程使用多核CPU
    可以将单进程绑定到单核CPU上
    难以充分利用CPU资源
    可以充分利用CPU资源
    内存轨迹大,数据局部性若
    内存轨迹小,数据局部性强
    符合线性的编程思想
    不符合传统编程思想
    PS:为毛每个语言都说自己好得不得了,这也得广告一把?




  • 相关阅读:
    磁盘io测试工具
    SqlServer性能瓶颈分析
    sqlserver镜像相关资料
    sqlserver数据库镜像运行模式
    Sqlserver2008 FileStream解决图片存储问题
    nginx负载均衡配置
    cacti-不出图形,cacti.log中出“ERROR: SQL Assoc Failed!
    Nginx的配置文件详解
    Linux环境(Centos) 安装mysql
    centos 命令行和图形桌面模式的切换
  • 原文地址:https://www.cnblogs.com/liujb/p/3341193.html
Copyright © 2011-2022 走看看