Node.js第二天
- 昨天经过了一个小时的下载, 安装,跑了一个helloworld, 今天开始了解下它的实现原理。
- 首先它是一个平台,不要把它看成一个语言,它是一个运行javascript的平台,它是单线程,单进程的。如果是这样,我们现在的硬件都是多核的,怎么才能让它跟硬件结合得更好呢?
(从搜索出来的结果看,貌似有很多第三方实现的module, 详细情况待后续的研究)
3. 它是一个event driven 和 No Blocking的platform。
这里问题就来了,事件驱动的,到底怎么个事件驱动法?
非阻塞的,那说明了它是实现并发?怎么实现并发呢?
第一个问题,事件驱动??
我想起了前阵子去外婆家吃饭,5点到哪里,领号(我忘了在网上预约了),柜台小姑娘发给我一支笔和一张菜单,让我去旁边先选菜,等待叫号。
我在等待叫号的过程中,我已经选好菜单,并且提交了菜单给服务员,服务员也帮我把菜单传送到了厨房,只要等待叫到我的号就可以了。我刚入座一分钟,我的菜也上了。这就是事件驱动,它没有阻塞我的后面的顾客,我也不会一直站在柜台哪里等待,直到叫到我的号了我后面的顾客才上来领号填单。
当服务员叫我说我的位置已经准备好了,这就是一个Callback function 的过程,叫回调函数。
那个对于Node.js, 它的事件驱动呢?
当一个web请求过来的的时候,它会先接收这个请求,然后把这个请求关闭再处理这个请求,这样其他请求会不断地被接收。当前面的请求处理好了之后,它的回调函数就会被传回给线程队列,当这个线程在线程队列里面处在了最前面的位置,这个时候结果就能被客户所看到。
4. 它是构建在google V8 engine 上面的,用C++编写的,听说之前它是用Ruby编写的,但是性能不怎么样,才考虑用C++
Ques:
- Node.js的优势是什么呢,相比于其他的框架它能更好地解决什么问题?
- 什么情况下我们才考虑用Node.js?
- web socket服务器
- TCP/UDP套接字应用程序
- 复杂逻辑的web应用
- 命令行工具
- 客户端Javascript编译器
Linked:
https://www.npmjs.com/ -- node 包管理器
http://nodejs.org/docs/v0.12.7/api/all.html -- 官方文档
https://cnodejs.org/ -- 淘宝人整的论坛
http://www.infoq.com/cn/articles/nodejs-weakness-cpu-intensive-tasks -- Node.js的弱点
http://howtonode.org/ -- 杂烩
浙公网安备 33010602011771号