理解Node.js的事件驱动和异步编程

Node.js 是基于chrome V8 引擎的Javascript 的运行环境,使用了事件驱动和非阻塞式I/O模型

Node.js是单进程单线程的???擦擦擦

读《node.js深入浅出》中,看到‘事件驱动这个词并不陌生’的时候,发现自己就是个cb。在网上找了很多文档好好学习了一下,看完之后只是稍微明白了点,还是处于懵逼状态。先记录一下,之后看到时会明白自己还是个cb,要好好学习,祖国在等着我啊…

infoQ

在传统语言的网络编程中,我们会用到回调函数,比如当socket 资源达到某种状态时,注册的回调函数就会执行。Node.js的设计思想中以事件驱动为核心,它提供的大多数的API都是基于事件的、异步的分格。

使用Node.js开发的人员需要根据自己的业务逻辑注册相应的回调函数。这些回调函数都是异步执行的,这意味着虽然在代码结构中,这些函数看似是依次注册的,但是它们并不依赖于自身出现的顺序,而是等待相信的事件触发。

上网看了很多事件驱动文章,看到了一个例子: 医生看病(瞬间醍醐灌顶了)

在美国去看医生,需要填写大量表格,比如保险、个人信息之类,传统的基于线程的系统(thread-based system),接待员叫到你,你需要在前台填写完成这些表格,你站着填单,而接待员坐着看你填单。你让接待员没办法接待下一个客户,除非完成你的业务。

想让这个系统能运行的快一些,只有多加几个接待员,人力成本需要增加不少。

基于事件的系统(event-based system)中,当你到窗口发现需要填写一些额外的表格而不仅仅是挂个号,接待员把表格和笔给你,告诉你可以找个座位填写,填完了以后再回去找他。你回去坐着填表,而接待员开始接待下一个客户。你没有阻塞接待员的服务。

你填完表格,返回队伍中,等接待员接待完现在的客户,你把表格递给他。如果有什么问题或者需要填写额外的表格,他给你一份新的,然后重复这个过程。

这个系统已经非常高效了,几乎大部分医生都是这么做的。如果等待的人太多,可以加入额外的接待员进行服务,但是肯定要比基于线程模式的少得多。

Node.js做了啥呢?

传统的web server 多为基于线程模型。如Apache… 启动一个server,它开始等待连接,当接受到一个连接,server保持连接连通直到页面或者什么义务请求完成。如果这是需要花费时间去读取磁盘(也就是IO操作了)或者访问数据库,则server阻塞了IO操作。想提高这样的server性能,则需要启动更多的server实例。

我们Node.js呢??
Node.js使用事件驱动模型,当接受到一个请求后,server将它关闭然后进行处理,server继续服务下一个请求,当请求完成后,将其放入处理队列,当到达队列开头,server将结果返回给用户。

非阻塞式IO或事件驱动IO: 这个模型非常高效可扩展性非常强,因为server一直接受请求而不等待任何读写操作

就写到这里吧。先了解一下再说。如果能把这篇文章读懂就够了,然而我读不懂也不想读。。。。。。。后期再深入了解(好好学习Node.js吧)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值