有没有人有任何好的资源显示在不使用线程池的情况下在 C# 中创建无限数量的线程?
我意识到有人可能会质疑具有数百或数千个线程的系统的架构,所以让我解释一下任务,以防 CPU/OS 使这项工作变得毫无意义。
我有大约 2500 个 URL 需要测试。其中一些非常慢:响应时间超过 10 秒。无论如何,网络延迟约占每个操作的 99.99%。
我想尽快测试所有 2500 个 url。
我连接了一个测试,在它们自己的线程中测试它们中的每一个。
问题是我正在使用 ThreadPool,我认为默认限制是 25,所以这不太好。我需要手动管理它们。我要出去吃午饭吗?
我意识到 CPU/OS 可能还会限制每个 CPU 的并发线程数,但我相信这个限制远高于 25。
关于架构,我意识到如果我要连接 2000 个 HTTP 线程,我可能会锁定整个盒子,但这是一个独立运行的管理任务,可以占用尽可能多的可用资源。
感谢您的见解。
最佳答案
您不能创建无限数量的线程。如果你尝试,你会遇到很多问题。
但是,您可以在 C# 中增加 ThreadPool 中的默认线程数。只需使用 ThreadPool.SetMaxThreads给线程池更多的线程来工作。它可能比任何手动线程尝试做得更好(无需在手动过程中投入大量精力)。
关于C# 手动线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1296134/