logo资料库

技术分享文档20181025.pptx

第1页 / 共15页
第2页 / 共15页
第3页 / 共15页
第4页 / 共15页
第5页 / 共15页
第6页 / 共15页
第7页 / 共15页
第8页 / 共15页
资料共15页,剩余部分请下载后查看
单线程 Node.js不为每个客户连接创建一个新的线程,而仅仅使用一个线程。当有用户 连接了,就触发一个内部事件,通过非阻塞I/O、事件驱动机制,让Node.js程序宏观 上也是并行的。使用Node.js,一个8GB内存的服务器,可以同时处理超过4万用户的 连接。 非阻塞I/O non-blocking I/O 例如,当在访问数据库取得数据的时候,需要一段时间。在传统的单线程处理 机制中,在执行了访问数据库代码之后,整个线程都将暂停下来,等待数据库返回 结果,才能执行后面的代码。也就是说,I/O阻塞了代码的执行,极大地降低了程序 的执行效率。 事件驱动event-driven Node.js底层是C++(V8也是C++写的)。底层代码中,近半数都用于事件队列、 回调函数队列的构建。用事件驱动来完成服务器的任务调度,这是鬼才才能想到的。 针尖上的舞蹈,用一个线程,担负起了处理非常多的任务的使命。
阻塞和非阻塞,同步和异步是node.js里经常遇到的词汇,我举个简单的例子来说明: 我要看足球比赛,但是妈妈叫我烧水,电视机在客厅,烧水要在厨房。家里有2个水壶,一个是普通的水壶, 另一个是水开了会叫的那种水壶。我可以: 1.用普通的水壶烧,人在边上看着,水开了再去看球。(同步,阻塞)这个是常规做法,但是我看球不爽了。 2.用普通水壶烧,人去看球,隔几分钟去厨房看看。(同步,非阻塞)这个又大问题,万一在我离开的几分 钟水开了,我就麻烦了。 3.用会叫的水壶,人在边上看着。(异步,阻塞)这个没有问题,但是我太傻了。 4.用会叫的水壶,人去看球,听见水壶叫了再去看。(异步,非阻塞)这个应该是最好的。 等着看球的我:阻塞 看着电视的我:非阻塞 普通水壶:同步 会叫的水壶:异步 所以,异步往往配合非阻塞,才能发挥出威力。
分享到:
收藏