gpt4 book ai didi

c# - 在c#中实现大规模并行应用程序的最佳方式

转载 作者:行者123 更新时间:2023-11-30 13:39:11 25 4
gpt4 key购买 nike

我正在开发一个网络绑定(bind)应用程序,它应该有很多(数百个,可能是数千个)并行进程。

我正在寻找实现它的最佳方法。

当我尝试设置时

ThreadPool.SetMaxThreads(int.MaxValue, int.MaxValue);

与创建 1000 个线程并使它们并行执行相比,应用程序的执行变得非常不稳定。

我在某处听说 delegate.BeginInvoke 在某种程度上比 new Thread(...) 更好,所以我试过了,然后打开了应用程序在调试器中,我看到的是并行线程。

如果我必须创建很多线程,确保应用程序顺利运行的最佳方法是什么?

最佳答案

您是否在 C# 5/.NET 4.5 中尝试过新的 await/async 模式?

我没有关于它在幕后如何运作的消息来源,但这个新功能最常见的用例之一是等待 IO 绑定(bind)的东西。


线程 不是轻量级对象。它们的创建和上下文切换成本很高;因此线程池的原因(预先创建和回收)。大多数涉及网络或其他 IO 端口的常见解决方案利用较低级别的 IO 完成端口(有一个托管库 here)在端口上“等待”,但线程可以继续正常执行。

BeginInvoke 将利用线程池线程,因此如果线程可用,它会比创建您自己的更好。如果过度使用这种方法,会立即导致线程饥饿。

从长远来看,设置如此高的线程池数量是行不通的,因为线程对于您想要执行的任务来说太重了。


Axum 是以前的 Microsoft Research 语言,用于实现适合此任务的大规模并行性。它的操作类似于 Stackless Python 或 Erlang。 Axum 的很多概念都进入了 C# 5 和 .NET 4.5 的并行驱动器。

关于c# - 在c#中实现大规模并行应用程序的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13420447/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com