引子
为了web app而看的nodejs,对于nodejs的单线程对高并发友好小小烟纠了下,分享,欢迎指正谬误。。。
都说单线程nodejs能减少I/O问题,淘宝team说它是一个平台而不是一种语言,它的单线程是指JS执行线程(其实就是主线程的意思),实际的I/O操作都是多线程执行的。(题外话)
那开始入正题。
简单的说 Node.js 就是运行在服务端的 JavaScript。
Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台。
Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好。
Node.js 是运行在服务端的 JavaScript,如果你熟悉Javascript,那么你将会很容易的学会Node.js。
我们假设现在有两种餐厅的出餐模式:
apache模式,以下简称A模式。一共有三个点餐窗口,三位服务人员,三位厨师(请自行脑补画面,但是别乱想)。顾客在任一窗口点餐[所谓多线程],点完后服务员传达厨师,等待厨师出餐,服务员返给顾客[同步返回响应结果]。顾客本次购物结束。服务员进行下一位顾客的点餐[接收下一个请求]。
nodejs模式,以下简称N模式。一共只有一个点餐窗口一位服务员[单线程],一位厨师[CPU]。顾客在窗口点餐,点完后服务员传达厨师,厨师进行出餐,而服务员不必等待[不必等待当前请求返回结果],直接进行下一位顾客的点餐,然后继续传达下一个顾客的订单给厨师。厨师挨个完成后抛出给出餐窗口[异步返回响应结果],顾客到出餐窗口取餐,本次购物结束。
那么问题来了,假设餐厅做的是卤味(配酒的那种你懂的),此时同时来了四个顾客。A模式下有三位顾客可三个窗口同时点餐,另一位需等待或者说顾客觉得满载[无法接收请求]也下不了单直接走人去隔壁老王家了,厨师加热2分钟后出餐,平均每人等待2分钟。N模式下必须排队,但是可以无需等待,四位顾客都可先下单,第四位顾客的等待时间应该是八分钟之内,然后到出餐窗口取。这种模式下不仅能避免A模式下因两位顾客同时点了仅剩的一份鸡爪而产生的厨师对资源处理[数据处理]的矛盾问题而且能解决同时多人来下单下不了单的问题[高并发]。
问题又来了,假设我做的是莆田卤面生意,假设加工一份要10分钟(豪华版),如果同时来三位顾客,那A模式下每位顾客10分钟后可用餐,但是N模式下第三位要30分钟后才能用餐,因为一位厨师忙不过来了,你下单了还是要等着,表示不饿死也馋死了。这大概就是为什么需要CPU大量计算的不适合使用nodejs的一个说法吧。
总结:node适合运用在高并发、io密集、少业务逻辑的场景。
应该说各有千秋吧,没有最好的只有最适合的(请注意,话题开始跑偏)。。??~~