五千年(敝帚自珍)

主题:谁能给个估算 -- ppw

共:💬15 🌺1
全看分页树展 · 主题 跟帖
家园 是啊,那种每个Thread-per-request的线程模型有着不小的问题

尤其是Scalability issue。所以好的server program现在都使用Thread pool模型。高级的Thread pool可以根据当前硬件情况来动态改变Thread数量,以期达到最优化效果。Thread太多了,消耗内存不说,并且CPU时间都用来做thread context switch了,干不了什么“正经”事儿。

我一哥们号称Visual C++ 天下独步,曾经跟我吹牛,说他那个程序一但运行起来,上千条Thread,复杂的不得了云云。

其实他这个程序设计得非常有问题。最常规的做法应该是将那些任务放到一个或几个Task Queue里,然后一定数量的Thread不停的从中Take task,来异步完成。(他的C++功力总体上我还是比较佩服的)

.NET的Thread pool 就是这个概念。QueueUserWorkItem就是前台将任务放到Task Queue里,后台Thread pool会自动接管这些个任务来异步完成。.NET的Thread pool比较智能,会根据任务以及硬件情况(CPU数量和Memory)自动伸缩。比我当年写的“半自动”Thread pool又前进了一步。不过.NET每一个Process只能有一个Thread pool,有时候不是非常灵活。

Java现在也提供了类似的Thread pool,只是我一直没有试过!

全看分页树展 · 主题 跟帖


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

Copyright © cchere 西西河