C# 使用线程还是线程池更好一点?

我有一个项目作为数据接收中心。下面的客户端具体有多少个不定,每条数据处理方式一样,需要存储到同一个数据库中不同的表里。数据处理时不能让界面卡死。我想问这个情况是用线程池还是线程处理好一点?(客户端共有多少个以及当前个数已知)。

如果是你的客户端上传数据,那用线程或者线程池区别不大。线程池的优势在于可控制最大并行线程的数量,这点在服务端编程作用明显。
随着请求数的增加,每次请求都新开辟线程的话,会造成线程的急剧增加,占用大量的瞬时内存开销,线程是种高开销的数据结构,每个线程大致需要1m左右内存。线程池中的线程在使用完以后,可以立即关闭,如果池中的线程全部都被任务占满,clr也不会创建新的线程,而是等待池中其他线程恢复了可用状态。
如果仅仅是防止界面假死,使用异步足矣,虽然异步操作仍然是使用线程池。追问

我编写的是服务器端。下面客户端数据传输比较频繁,平时一分钟一条,而且几乎都是在同一分钟上传。特殊情况下有可能5~10秒客户端就有一条数据上传。这种情况下我不知到用哪种方式好。

追答

如果你能理解我上段的说明,就应该明白,一定是线程池更好,因为它的优势在于所有线程由池对象统一调度管理,永远不会超出线程池所允许的最大数量(线程池的最大线程数一般是1000)。所以不会突然产生无法控制的线程激增情况,造成服务器资源的浪费。
要知道,线程过多回导致计算机花费大量性能消耗用于线程间的上下文切换,将严重影响实际数据处理性能。

追问

这个我基本明白了,就是说线程池使得程序的资源消耗可控,不会出现超负荷的情况。
另外一个问题就是假如线程池有1000个线程,其中只用到一部分,那么他消耗的资源是只有使用的一部分还是始终维持最大1000个线程的消耗。呵呵 这是最后一个问题了。因为对这块了解的不是很多。

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-04-11
小程序线程 ----速度快,内存小(其实也可以算线程池,只是一个)
大程序线程池----必须用线程池。追问

程序本身就是不停的接受客户端传过来的数据,然后处理入库。客户端多少不定。。
有可能成百上千,少的有可能只有1个。再问一下,线程池的处理速度跟什么有关?

追答

在主程序中
(视为主线程)
|异步处理——> 创建子线程() ——>监听客户程序
| |由它来创建(线程池)
| 主程序<——判断结束 < ——由它来用户客端口 <——为客户提供服务(单线程)
没有太大的影响。我以为是单机程序。
由主程序处理请求。有客户了,就触发创建一个异步子线程。
子线程如果是单线程就面临一个问题。如果是多了,内存负荷就大了。
如果是线程池就浪费。
没有那个更好,看你的问题。

追问

呵呵 谢谢 你的帮助 基本上我明白了。不过二楼写的更多,所以分数可能不会给你了。如果可以分别给的话,结贴的时候我会给你一部分。分不多,我相信你能帮我也不差这点分。一会我加你好友吧,呵呵。

追答

你这10分到是挺值的,还好你问题算是解决了就行。
加好友,就不用。

追问

汗。。。下次就没有分问了。。。
所以说加好友是有一个龌龊的想法滴。。呵呵
非常感谢~http://zhidao.baidu.com/question/162633713.html?quesup2&oldq=1
来这里写点东西 我给你分 呵呵

第2个回答  2012-04-11
不管什么情况,都应该用线程池。追问

线程池能否在程序中动态添加上下限?因为客户端总数可以知道,但是具体有多少个客户端上线要等程序运行起来知道才知道,而且随时可能变化。。。

相似回答