异步:
你请人吃饭,准备一起去的。结果那人刚好有事,让你先去点菜,你去点好菜,他忙完就来了,这就是异步的优势(不耽误事!)
同步:
就是,你必须等那个人忙完了,才一起去(浪费时间)
理解来源于群友“老了学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. struct 模块解决 TCP黏包问题

    首先来看一下产生黏包现象的一段代码: # server.py 服务端 import socket ​ sk = socket.socket() sk.bind(('127.0.0.1',9000)) ...

  2. (2)Spring Boot返回json数据【从零开始学Spring Boot】

    在做如下操作之前,我们对之前的Hello进行简单的修改,我们新建一个包com.kfit.test.web 然后新建一个类HelloControoler, 然后修改App.java类,主要是的这个类就是 ...

  3. ie版本

    <!--[if lte IE 6]> 自定义代码 <![endif]-->

  4. Java多线程演示样例(模拟通话,sleep,join,yield,wait,notify,Semaphore)

    主线程等待子线程的多种方法 synchronized浅析 sleep 是静态方法,Thread.sleep(xx)谁调用谁睡眠. join 是合并方法.当前线程调用其它线程xx.join()则等到xx ...

  5. XCODE插件 之 Code Pilot 无鼠标化

    什么是Code Pilot? Code Pilot 是一个 Xcode 5 插件.同意你不许使用鼠标就能高速地查找项目内的文件.方法和标识符. 它使用模糊查询匹配(fuzzy query matchi ...

  6. angularjs1-路由

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  7. Redis常用的命令

    常规命令查询地址: http://redisdoc.com/ 如下图:

  8. springmvc生成注册验证码

    通过SPRing MVC为系统添加验证码 1:布局登陆页面,用户名,密码,填写验证码的文本框,及验证码的图片及点击换图 <%@ taglib prefix="c" uri=& ...

  9. 【转】在IIS上部署你的ASP.NET Core项目

    概述 与ASP.NET时代不同,ASP.NET Core不再是由IIS工作进程(w3wp.exe)托管,而是使用自托管Web服务器(Kestrel)运行,IIS则是作为反向代理的角色转发请求到Kest ...

  10. 微信小程序 | 小程序的转发问题

    1.配置小程序页面静态转发信息 关于小程序转发问题,文档 在 page 页面填加了该监听函数,会在小程序右上角 ... 菜单中显示“转发”按钮: 监听函数需要 return {} 其中的内容配置转发信 ...