相关疑难解决方法(0)

多线程:你在什么时候创建了太多的线程?

我正在研究一个多线程应用程序.

此应用程序以单个线程开始,并扩展为多个线程,以实现性能提升.

我有一个主线程,它将工作分成较小的块并将其卸载到处理块的工作线程.使用信号量控制该部分,以便在任何时候仅允许X个工作线程.工作线程产生数据块然后存储在队列或环形缓冲区中,然后由一个保存线程读取.该线程负责将数据块保存到磁盘(有时跨越本地网络).

我的开发机器是四核,内存为8GB.在我的机器上运行具有3个工作线程和1个保护程序线程的应用程序,可以在网络上稳定地传输数据,处理器平均使用率为75%.

第二种攻击这个问题的方法是在工作线程和保护程序线程之间添加另一组线程(即从当前工作线程中取出一个任务并将其添加到另一个线程)(我还为每个线程添加一个队列)这些线程)应用程序似乎没有在我的机器上获得任何速度,因为似乎有太多争用资源RAM总线饱和和处理器争用.

通过对线程数量及其优先级的大量实验,我找到了我的机器的理想设置,用于解决此问题的第一种和第二种方法.现在生产机器将拥有8个内核和64GB内存.必须为它配置一个非常不同的环境和应用程序.

我的问题是,你在什么时候创造了太多线程?是否总是需要通过实验来确定给定机器的理想设置?是否有一种方法可以确定或观察锁定是否过多地远离应用程序?

(我没有使用线程池,因为它不适合我的需求,长时间运行的线程由信号量和其他锁定机制管理.)

.net multithreading

8
推荐指数
2
解决办法
2661
查看次数

标签 统计

.net ×1

multithreading ×1