`
webdev2014
  • 浏览: 678288 次
文章分类
社区版块
存档分类
最新评论

node.js第三课(node.js异步式IO与事件编程)

阅读更多

Node.js最大的特性就是异步式I/O与事件紧密结合的编程模式。这种模式与传统的同步式IO线性的编程思路有很大的不同,因为控制流很大程度上要靠事件和回调函数来组织,一个逻辑要拆分为若干个单元格。
内容:阻塞和线程
1.同步式I/O或阻塞式I/O
线程在执行中如果遇到磁盘读写或网络通信,通常要耗费较长时间。这时操作系统会剥夺这个线程的CPU控制权,使其暂停执行,同时将资源让给其他的工作线程,这种线程调度方式成为阻塞,当I/O操作完毕时,操作系统将这个线程的阻塞状态解除,恢复其对CPU的控制权、令其继续执行。
2.异步式I/O或非阻塞式I/O
针对所有I/O操作不采用阻塞策略,当线程遇到I/O操作时,不会以阻塞的方式等待I/O操作的完成或数据的返回,而只是将IO请求发送给操作系统,继续执行下一条语句,当操作系统完成IO操作时,以事件的形式通知执行IO操作的线程,线程会在特定时候处理这个事件,为了处理异步IO,线程必须有事件循环,不断的检查有没有未处理的事件,依次予以处理。
3.非阻塞与阻塞模式区别
非阻塞模式下,一个线程永远在执行计算操作,这个线程所使用的CPU核心利用率永远是100%,IO以事件的方式通知。
阻塞模式下,多线程往往能提高系统吞吐量,因为一个线程阻塞还有其他线程在工作,多线程可以让CPU资源不被阻塞中的线程浪费。
调度:当前一个工作,在5分钟之后执行
4.同步式IO与异步式IO区别
同步式IO(阻塞式)异步式IO(非阻塞)
利用多线程提供吞吐量单线程即可实现高吞吐量
通过事件片分割和线程调度利用多核CPU 通过功能划分利用多核
需要由操作系统调度多线程使用多核CPU 可以将单线程绑定到单核CPU
难以充分利用CPU资源 可以充分利用CPU资源
内存轨迹大,数据局部性弱 内存轨迹小,数据局部性强
符合线性的编程思维不符合传统编程思维
分享到:
评论

相关推荐

    Node.js Web开发实战-(共14章)PPT.rar

    第3章 Node.js基础入门.ppt 第4章 异步编程与包管理.ppt 第5章 http模块.ppt 第6章 Web开发中的模板引擎.ppt 第7章 Node.js中的文件操作.ppt 第8章 认识express模块.ppt 第9章 MySQL数据库.ppt 第10章 Express框架....

    Node.js v14.8.0下载

    Node.js是基于Chrome V8引擎的一键JavaScript运行时,采用单线程、异步IO和时间驱动设计来实现高并发,可以让JavaScript脱离浏览器运行在服务器上,Node.js是目前最大的开源包管理系统,推荐大家开发使用!

    跟我学Nodejs(一)— Node.js简介及安装开发环境

     采用单线程、异步IO与事件驱动的设计来实现高并发(异步事件也在一定程度上增加了开发和调试的难度);  Node.js内建一个HTTP服务器,所以对于网站开发来说是一个好消息;      主页:http://nodejs.org/

    适用于Apache Cassandra的DataStax Node.js驱动程序-Node.js开发

    适用于ApacheCassandra:registered:的...安装$ npm install cassandra-driver功能简单,准备和批处理语句异步IO,并行执行,请求管道连接池自动节点发现自动重新连接可配置的负载平衡和重试策略可与任何c语言一起使用

    适用于 Apache Cassandra 的 DataStax Node.js驱动程序_代码_JavaScript

    一个现代、功能丰富且高度可调的 Node.js 客户端库,用于 Apache Cassandra 和DSE,仅使用 Cassandra 的二进制协议和 Cassandra 查询语言。 特征 简单、准备和批处理语句 异步 IO、并行执行、请求流水线 连接池 ...

    learning_node.pdf Node学习指南(非扫描)

    Node.js是一套用来编写高性能网络服务器的JavaScript工具包。它可以让JavaScript在服务器端运行,因此,可用来快速构建网络服务及应用的平台。  《Node学习指南》是学习Node编程的入门指南。全书共16章。前4章主要...

    Node.js 的异步 IO 性能探讨

    Node.js 的卖点是「异步单线程」,虽然主流 Web 后端编程语言中,对异步编程有很好支持的语言并不少,但只有 Node.js 丧心病狂地将所有 IO 强制异步进行。

    common-node-js:用于Node.js环境的共享JavaScript实用工具

    JavaScript实用程序的公共库-适用于两种Node.js环境。 概述 特征 适用于AWS服务的基于约定的便利包装(例如DynamoDB,S3,SES,SNS,SQS等) 基于承诺的便捷包装器,用于关系dB访问(PostgreSQL,MySQL) 用于...

    [游戏开发] 达达房卡麻将二次开发VIP系统学习课程 [MP4] (16.66G)

    │ 第016课node.js_fs模块的同步异步读写.rar4 R7 X5 @# a4 v │ 第017课node.js_Base64_MD5_SHA1_Timer模块.rar │ 第018课node.js_mysql数据库的基本使用.rar4 h5 v, n; ?' t7 ^ h# Z. x │ 第019课node.js使用...

    达达房卡麻将二次开发VIP系统学习课程.zip

    第019课node.js使用mysql模块编程操作数据库 【录播】node.js使用mysql模块编程操作数据库(42分钟) 33 第020课redis的搭建和基本使用 【录播】第020课redis的搭建和基本使用(47分钟) 34 第021课noderedis...

    node-workshop:ScaleConf Node.js Workshop示例说明异步编程和事件循环

    2.异步与同步IO 同步服务器架构 同步服务器如何工作? 让我们从以伪代码编写的朴素单线程服务器开始: // file: single_threaded_server.psuedo while ( true ) { // Blocking listen on some port for a request ...

    浅谈Node 异步IO和事件循环

    学习Node就绕不开异步IO, 异步IO又与事件循环息息相关, 而关于这一块一直没有仔细去了解整理过, 刚好最近在做项目的时候, 有了一些思考就记录了下来, 希望能尽量将这一块的知识整理清楚, 如有错误, 请指点轻...

    ElemeFE-node-interview:饿了么Node.JS面试题解答

    如何通过饿了么 Node.js 面试(解答) 听说饿了么被阿里收购了,饿了么虽然没了,文档还是要更的... 本项目是基于而来,对上述教程中提出的问题进行了解答,本项目是为了记录本人对Node知识点的总结,没有权威性如有错误...

    Node-Learning:.Node.js学习流程:包含主要的基础知识和简单的项目应用开发

    Node.js学习笔记第一天Node.js是什么Node.js是一个开源与跨平台JavaScript运行时环境,内置于Chrome的V8引擎之上它不是一门语言,不是库也不是一种框架;在这种环境下,js可以脱离浏览器进行简单来说:node.js可以...

    详解Node.js异步处理的各种写法

    异步的“坑” 最近一段时间参与开发了一个Node.js后台项目,作为一个PHP开发者,上手项目本身并不难,但是开发的过程却并不顺利,不顺利的主要原因在于...众所周知,Node.js采用的是单线程的异步模型,在具体代码的写

    machine:用于Node.js和浏览器的异步有限状态机库

    用于Node.js和浏览器的异步有限状态机库。 安装 该库在Node.js运行时中需要async/await和Proxy支持,因此理想情况下为node>=7.4 。 $ npm install --save @f5io/machine 或者 $ yarn add @f5io/machine 概念 使用此...

    nodam:Node.js 异步 Monad

    NodAM 代表 Node.js 异步 Monad。 NodAM 通过异步调用为控制流提供简洁、直观的功能。 您可以序列化和并行化您的 IO 调用、组合序列和创建修改后的序列,而不会对原始序列产生任何影响。 如果您不知道 monad 是什么...

    async-yield-co:为什么需要 co 的详细示例(在 node.js 中)

    要理解,你需要了解 JavaScript,node.js 是什么,事件循环(单线程)在其中是如何工作的,并且有异步编程的经验。 所有材料都按编号排序(推荐的母带顺序),并且它们本身包含所有必要的注释。示范令0x - 同步和...

    nodejs中实现阻塞实例

    node.js中与生俱来的单线程编程、回调函数异步式风格让我们有时喜有时忧。先说单线程,很多人会费解于node.js的单线程如何能做到高并发?这个问题不是本文重点,点到为止。澄清一点,node.js的单线程仅仅指...

Global site tag (gtag.js) - Google Analytics