多线程问题(文字版)
有点胸闷啊。好不容易学会多线程使用上了。却碰到一个严重的问题Task(采用任务)
我的程序是这样的:
每10秒产生20个线程
每个线程都会独立运行30秒
结果:
任务管理器查看到,线程数不停地膨胀。
线程释放的速度,赶不上产生的速度。
我的想法:
理论上应该第40秒就会释放最初的20个线程(因为他们已经运行了30秒了)。。。再过10秒虽然又会新产生20个,但是也会释放20个。。实际始终维持在60个线程
怀疑问题原因:
threadpool的活动线程的吞吐量不足,导致。
业务需要:
每10秒监控20个点。每个点完成需要30秒
下一步打算尝试:
手动释放线程。不知道可行不可行。
求解决思路,否则线程稳步攀升。。。到一定程度内存就撑爆了
--------------------编程问答-------------------- 看一你线程 的代码怎么写的?
肯定写得有问题。 --------------------编程问答-------------------- 线程执行完了会终止吗?你怎么实现的? --------------------编程问答-------------------- 你直接初始化60个线程放在一个数组里....这个能满足控制欲 --------------------编程问答-------------------- 说明“每个线程都会独立运行30秒”是不成立的。
一个服务窗口服务一个客户是一分钟,问题是你现在只有一个服务窗口,却有60个客户。 --------------------编程问答-------------------- 你现在的思路是n个任务开n个线程每一个线程序做一个任务就释放。
线程申请释放很耗资源的
设计思路不对。
一般的多线程的思路是 --》开固定个线程做n个任务才对。
--------------------编程问答-------------------- 一般双核CPU的线程池会有1023个工作线程和1000个I/O线程,所以应该不会不够用。
线程池中的线程只适合耗时短的操作
如果是练习使用多线程,建议不要使用任务
.NET4中加入的任务更适合定义连续的工作
还要看你用的哪种方式启动任务,任务是否立即执行 --------------------编程问答-------------------- 兄台,弄个线程池你还要新增、释放线程干嘛,任务派到队列里边,完成任务的线程自己开始新任务了。
补充:.NET技术 , C#