当前位置:  开发笔记 > 编程语言 > 正文

快速创建数千个线程并同时执行它们

如何解决《快速创建数千个线程并同时执行它们》经验,为你挑选了3个好方法。

我有一个C#.NET应用程序需要通知4000到40,000个连接设备,以便同时执行任务(或尽可能接近同步).

该应用程序运行良好; 但是,我对表现不满意.在一个完美的世界中,只要我发送命令,我希望所有设备同时响应.然而,似乎有一个延迟,因为我创建的所有线程都会启动并执行任务.

我使用.NET 4.0 ThreadPool,使用自定义线程创建了我自己的解决方案,我甚至调整了现有的ThreadPool,以允许一次执行更多线程.

我仍然想要更好的表现,这就是我在这里的原因.有任何想法吗?评论?建议?谢谢.

-Shaun

让我补充一点,应用程序通知这些"连接设备",他们需要在多播地址上监听音频.



1> Philip Rieck..:

双核超线程处理器可以同时执行4个线程 - 取决于线程正在做什么(没有IO争用或内存访问等).一个四核超线程也许是8.但40K只是不能实际发生.

如果你想要几乎同时进行,你最好在旋转时尽可能多的线程,因为计算机有免费核心并让每个线程触发通知然后结束.你将以这种方式摆脱一堆上下文切换.

或者,看看其他地方.正如SB在评论中建议的那样,使用UDP多播通知侦听机器他们应该做某事.


如果可以的话,我会给你另外+1代表线程限制.

2> Randolpho..:

不能同时执行4000个线程,更不用说40k了.最好是在具有超线程的桌面盒上,最多可以同时进行8个进程(假设为四核).线程是伪并行的,甚至没有深入研究总线争用的问题.

如果你绝对需要40k设备的同时性,你需要某种形式的硬件同步.


而且我愿意打赌任何可以同时执行40k节点的硬件同步系统都会非常昂贵.

3> jnielsen..:

听起来您可以控制每个设备上运行的软件.在这种情况下,您可以查看HPC的使用情况并分层构建您的设备(节点)和/或使用MPI来执行远程进程.

对于层次结构示例:指定8个节点作为主要主节点,同样具有8个从节点,每个从节点也可以充当8个从节点的主节点(您可能需要查看自动订阅算法来执行此操作).您将拥有深度为6的层次结构以覆盖40,000个节点.每个主服务器都有一小部分代码在不断运行,等待指令传递给从服务器.

您所做的只是将指令传递给8个主要主控器,并且您的指令将由主控器异步传播到线路上的"集群".该指令最多只能传递5次,因此将快速传播.

或者(或结合)你可以看看MPI,这是一个无法解决的问题.有一些已建立的C#实现.

推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有