西西河

主题:【原创】进程的反击 -- zllwy

共:💬48 🌺136 新:
全看分页树展 · 主题 跟帖
家园 倒也不全是那样

以前没有线程的时候,那没什好说的,都得靠进程了。但这是笨办法,问题很多。所以当线程出现的时候,是计算机史的一个飞跃。

线程小名叫做轻量级进程(light-weight process),能干和进程类似的活但开销却小很多,所以当然是很多问题的最佳人选。但是它的scalability是个问题,线程管理不好的话,thread swap in and out的时间可能比干正经活的时间还要大。比如早期的Java,4个以上的CPU就很难利用好。

解决问题的途径有两条:

1)提高线程的scalability,比如Java在1.5以后引入了一真个的concurrent package,另外VM也改进了很多,最大可能的减少thread间的contention,提高多CPU或是多核下的性能。

2)把大的问题break down,多来几个进程,每个进程内的thread在一个合理可控制的范围内,避免thread间的contention。这样就全局来看系统的利用率可能是最优的。

所以现在最流行的不是什么“进程反击”,而是线程+进程的一个hybrid局面。就Google的chrome而言也是这样的,chrome的UI process有20多个thread,就是每个render process也有4个thread。所以进程和线程不是谁取代谁,谁吃掉谁的问题,而是怎么联合作战,共同完成任务的情形。

还有,现在大一点的系统大多是NUMA Architecture(Non-Uniform Memory Access),任务分解到多个进程上,每个进程分配在某个或某些个CPU上,接触某个bank或某几个靠得最近的内存,这可能是一种最合理的运行方式了。

全看分页树展 · 主题 跟帖


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河