异步:
你请人吃饭,准备一起去的。结果那人刚好有事,让你先去点菜,你去点好菜,他忙完就来了,这就是异步的优势(不耽误事!)
同步:
就是,你必须等那个人忙完了,才一起去(浪费时间)
理解来源于群友“老了学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:为毛每个语言都说自己好得不得了,这也得广告一把?

20121124.Nodejs异步式I/O与事件式编程的更多相关文章

  1. NodeJS异步I/O解析

    在现在的项目开发中,任何一个大型项目绝对不是简简单单的采用一个种语言和一种框架,因为每种语言和框架各有优势,与其死守一个,不与取各家之所长,依次得到一个高性能.搞扩展的产品. 对于一个.NET开发者, ...

  2. NodeJS示例异步式(Asynchronous)IO与同步式Synchronous)IO

    理解IO      IO(Input/Output)通常是指计算机线程进行慈磁盘读写或者网络通信时的一种行为.   同步式(Synchronous)IO和异步式(Asynchronous )IO   ...

  3. Nodejs异步异常处理domain

    前言 程序开发中,最麻烦的事情之一就是异常处理:对于Nodejs程序开发,最麻烦的事情莫过于异步异常处理. 以MVC的多层架构设计角度,异常总是要一层一层向上抛出,最后在客户端出打印错误.但是,Nod ...

  4. Node.js之路【第三篇】NodeJS异步实现

    NodeJS异步实现 Node.js异步编程的直接体现就是回调,它依托于回调来实现,但不能说使用了回调他就是异步了 回调函数在完成任务后就会被调用,Node使用了大量的回调函数,Node所有的API都 ...

  5. eventproxy 介绍这款好用的工具,前端事件式编程的思维

    前端事件式编程 <script src="eventproxy.js"></script> <script> // EventProxy此时是一 ...

  6. FreeRTOS——任务调度—抢占式,时间片和合作式

    以下转载自安富莱电子: http://forum.armfly.com/forum.php 本章教程为大家将介绍 FreeRTOS 操作系统支持的任务调度方式:抢占式,时间片和合作式,这部分算是 Fr ...

  7. html响应式布局,css响应式布局,响应式布局入门

    html响应式布局,css响应式布局,响应式布局入门 >>>>>>>>>>>>>>>>>>& ...

  8. CSS的三种样式:内联式,嵌入式,外部式以及他们的优先级

    从CSS 样式代码插入的形式来看基本能够分为下面3种:内联式.嵌入式和外部式三种. 1:内联式css样式表就是把css代码直接写在现有的HTML标签中,如以下代码: <p style=" ...

  9. [Selenium]显式等待 Explicit wait & 隐式等待 Implicit wait

    显式等待 Explicit wait 显示等待 , 就是明确的要等到某个元素出现或者某个元素满足某种条件,每隔一段时间检查一次,等不到,就一直等,如果在规定的时间内还没有找到,就跳出来检查间隔的时间和 ...

随机推荐

  1. Python编程:从入门到实践 - matplotlib篇 - plot & scatter

    matplotlib篇 plot & scatter # filename.py 获取当前文件名方法 import sys # 当前文件名 print(sys.argv[0]) # 去除后缀后 ...

  2. java+selenium自动化遇到confirm弹窗,出现NoAlertPresentException: no alert open

    //操作js的confirm弹窗,bool控制是否点击确定,true为点击确定,false为点击取消 public static void OperaterJSOfConfirm(WebDriver ...

  3. struts配置

    创建struts2的应用,首先应如前面所示要搭建好环境.jar包的导入和web.xml配置这里不在写出来.  如上所示,struts2中是采用<package>元素来管理Action的,包 ...

  4. BJFU 质数相关

    /* BJFU 质数相关 http://101.200.220.237/contest/19/problem/116/ 二分图 按质因数奇偶性建立二分图 * * */ #include <cst ...

  5. EXPLAIN sql优化方法(3)DERIVED

    派生表和视图的性能 从MySQL 4.1开始,它已经支持派生表.联机视图或者基本的FROM从句的子查询. 这些特性之间彼此相关,但是它们之间的性能比较如何呢? MySQL 5.0 中的派生表似乎和视图 ...

  6. Ajax接收json响应

    json?  Json和xml比较  Ajax如何使用JSON  Ajax接收json响应案例 什么是json?JSON (JavaScript Object Notation) 是一种轻量级的 ...

  7. yii2.0 表单小部件常用的默认选中

    下面自己总结了一下表单小部件中经常使用到的一些默认选中 直接在视图代码里面说明啦 <?php //这个表头就不多说了 use yii\helpers\Html; use yii\widgets\ ...

  8. asp.net mvc--传值-后台->前台

    后台传值到前台的方式 Model Binding # 这是public ActionResult中的最后部分 return View(listmode); json方式01 public void G ...

  9. ASP.Net Cookie总结

    Cookie是一段文本信息,在客户端存储 Cookie 是 ASP.NET 的会话状态将请求与会话关联的方法之一.Cookie 也可以直接用于在请求之间保持数据,但数据随后将存储在客户端并随每个请求一 ...

  10. hdu 2151

    就是一个dp,数组内存的步数, 数组没清空,wa了一次 #include<cstdio> #include<algorithm> #include<cstring> ...