Re: [问题] Node.js在处理异步机制的架构问题

楼主: danny8376 (钓到一只猴子@_@)   2014-04-26 23:01:27
※ 引述《yragggc (逼绳)》之铭言:
: 想请问Node.js在处理异步机制的架构问题
: 于Node.js的APP, 可以使用
: process.nextTick()
: child_process.fork()
: Cluster
: 这几个方式来处理CPU-bound的task
: 但我的理解, 应该是由libuv去处理所有关于分配thread的问题
: 也就是抽象化后, 让使用者只需要专注于single-thread程式的开发
: 而不是开发者手动去fork process?
这边不大能说有问题
不过有一点要搞清楚
async主体仍然是single thread
也就是同时间只能跑一段code
而对大多数的状况来说这个"一段"
通常就是一个function/method
(因为一个function处理完至少代表告一段落)
你今天资料收到后需要做一个cpu-bound的task的时候
正常人大概会全部写在同一个function里面
但如果在async的状况下会变成这整个task结束前
(因为上面说的,reactor一次CPU time就配给一整个function)
整个main thread(也就是整只程式)会被这个task block住
所以你必须要让reactor知道其实这个运算途中可以让别人插进来
而上方列的从上而下分别
reactor处理,仍然单thread单core,自己把整个运算拆成好几个function来算
process处理,可以多core (JS因为没thread的概念,所以就跳这么多了XD)
同样process处理,不过是比较高阶的wrapper,很多东西都帮你处理好了
后两者就是丢给OS来处理cpu time的分配了
也就是说thread(?)(其实async中没在用thread的XD)的分配这部分
针对I/O-bound的处理上可以自动妥善分配CPU使用
(务实上大多网页/应用程式也是I/O为主)
但遇到CPU-bound的部分
因为它仍然是single-thread
所以你必须要让reactor知道何时可以中断,让其他task进来
(太麻烦,所以通常会用thread解决,不过JS没thread只能fork process)
: http://ppt.cc/5I5f
: 图为简易Node.js architecture
作者: jenesis (ゼネシス)   2014-04-27 14:43:00
作者: yragggc (逼绳)   2014-05-15 01:20:00
推推

Links booklink

Contact Us: admin [ a t ] ucptt.com