第二篇Node介绍.PDFVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第二章:Node 介绍 本章内容:  什么是事件驱动编程,有什么优点  Node.js 如何简化了事件驱动开发 在传统程编程模里,I/O 操作就像一个普通的本地函数调用:在函数执行完之前程序被 堵塞,无法继续运行。堵塞I/O 起源于早先的时间片模型,这种模型下每个进程就像一个独 立的人,目的是将每个人区分开,而且每个人在同一时刻通常只能做一件事,必须等待前面 的事做完才能决定下一件事做什么。但是这种在计算机网络和 Internet 上被广泛使用的“一 个用户,一个进程”的模型伸缩性很差。管理多个进程时,会耗费很多内存,上下文切换也 会占用大量资源,这些对操作系统是个很大的负担,而且随着进程数的递增,会导致系统性 能急剧衰减。 多线程是个替代方案,线程是一个轻量级的进程,它会和同一个进程内的其它线程共享 内存,它更像传统模型的扩展,用来并发执行多个线程,当一个线程等待I/O 操作时,其它 线程可以接管CPU,当I/O 操作完成,前面等待的线程会被唤醒。就是说,一个运行中的线 程可以被中断,然后稍候再被恢复。此外,在一些系统下线程可以在多核 CPU 的不同核心 下并行运行。 程序员并不知道线程会在什么具体时间运行,他们必须很小心的处理共享内存的并发访 问,因此必须使用一些同步原语来同步访问某个数据结构,比如使用锁或信号量,以此来强 制线程以特定的行为和计划执行。那些大量依赖线程间的共享状态的应用程序,很容易就会 出现一些随机性很强,难以查找的奇怪问题。 还有一种方式是使用多线程协作,由你自己负责显式的释放CPU,并把CPU 时间交给 其他线程使用,因为由你亲自来控制线程的执行计划,因此减小了对同步的需求,但是也提 高了程序的复杂度和出错的机会,而且并没有避免多线程的那些问题。 什么是事件驱动编程 事件驱动编程(Evnet-driven programming )是一种编程风格,由事件来决定程序的执行 流程,事件由事件处理器(event handler )或事件回调(event callback)来处理,事件回调 是当某个特定事件发生时被调用的函数,比如数据库返回了查询结果或者用户单击了一个按 钮。 回想下,在传统的堵塞I/O 编程模式里,数据库查询可能像这样: result = query(SELECT * FROM posts WHERE id = 1); do_something_with(result); 上面的query 函数会让当前线程或进程一直处于等待状态,直到底层数据库完成查询操 作并返回。 在事件驱动模型里,这个查询会变成这样: query_finished = function(result) { 译者:Jack Yao ,本系列其它文章请查看/2013/01/08/pro-node-article-list/ do_something_with(result); } query(SELECT * FROM posts WHERE id = 1, query_finished); 首先你定义了一个叫query_finished 的函数,它包含了查询完成后要做的事。然后把这 个函数当做参数传递给query 函数,当query 执行完毕会调用query_finished,而不是仅仅返 回查询结果。 当你感兴趣的事件发生时会调用你定义的函数,而不是简单的返回结果值,这种编程模 型就叫事件驱动编程或异步编程。这是Node 一个最明显的特性,这种编程模型意味着当前 进程在执行 I/O 操作时不会被阻塞,因此,多个I/O 操作可以并行执行,当操作完成后相应 的回调函数就会被调用。 事件驱动编程底层依赖于事件循环(event loop ),事件循环基本上是事件检测和事件处 理器触发这两种函数不断循环调用的一个结构。在每次循环里,事件循环机制需要检测发生 了哪些事件,当事件发生时,它找到对应的回调函数并调用它。 事件循环只是运行在进程内的一个线程,当事件发生时,事件处理器可以单独运行并且 不会被中断,也就是说:  在某个特定时刻最多有一个事件回调函数运行  任何事件处理器运行时都不会被中断 有了这个,开发人员就可以不再为线程同步和并发修改共享内存这些事头疼了。 一个众所周知的秘

文档评论(0)

xiaofei2001128 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档