异步:
你请人吃饭,准备一起去的。结果那人刚好有事,让你先去点菜,你去点好菜,他忙完就来了,这就是异步的优势(不耽误事!)
同步:
就是,你必须等那个人忙完了,才一起去(浪费时间)
理解来源于群友“老了学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. Linux设备驱动--块设备(二)之相关结构体(转)

    上回最后面介绍了相关数据结构,下面再详细介绍 块设备对象结构 block_device 内核用结构block_device实例代表一个块设备对象,如:整个硬盘或特定分区.如果该结构代表一个分区,则其成 ...

  2. jenkins 自动化部署

    Execute shell Command BUILD_ID=DONTKILLMEif [ ! -d "/usr/jenkins/$JOB_NAME" ]; then mkdir ...

  3. BA--步进电机工作原理

    步进电机是将电脉冲信号转变为角位移或线位移的开环控制元步进电机件.在非超载的情况下,电机的转速.停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,当步进驱动器接收到一个脉冲信号,它就驱动 ...

  4. POJ 1811

    使用Pollard_rho算法就可以过了 #include <iostream> #include <cstdio> #include <algorithm> #i ...

  5. linux下測试硬盘读写速度

    买了个ssd硬盘,就想着跟普通的机械盘做个比較.由于桌面装的是ubuntu系统,所以就想用linux的命令简单測一下好了 以下是ssd的性能数据: 測试写: xxx@WaitFish:~ > t ...

  6. 遗传奥秘的伟大揭秘者:J.Watson

    J.Watson的近照: 人们公认,揭秘生命体的遗传奥秘(DNA)是二十世纪最伟大的科技成果之中的一个,或许就是人类最伟大的科技进步(而不是"之中的一个"). 上世纪是人类做出伟大 ...

  7. nyoj-647-奋斗小蜗牛在请客(进制转换)

    奋斗小蜗牛在请客 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描写叙述 一路艰辛一路收获.成功爬过金字塔的小蜗牛别提多高兴了.这不为了向以前帮助他的哥们们表达谢意,蜗牛宴请 ...

  8. AMD cpu 下 Pytorch 多卡并行卡死问题解决

    dataparallel not working on nvidia gpus and amd cpus   https://github.com/pytorch/pytorch/issues/130 ...

  9. Extjs 常见错误

    http://blog.csdn.net/lc448986375/article/details/8082014

  10. QT-helloworld-QtCreater编写

    前言:纯代码编写helloworld,解析代码含义. 一.新建空项目 新建->其他项目->Empty qmake Project 二.修改.pro文件 打开helloworld.pro文件 ...