C# 手动线程

标签 c# multithreading

有没有人有任何好的资源显示在不使用线程池的情况下在 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/

相关文章:

C# 与雅虎天气 api

java - RxJava 在连接映射后更改线程

java - 我的线程不适用于我的队列

java - 多个用户的 csv 并发处理

multithreading - 在 Delphi 中,后台线程中运行的代码是否比 VCL 主线程中运行的速度更快?

c# - 等号神奇地出现在发送给寻呼机的消息中

c# - 以编程方式调用 DockPanel-Suite 的 "AutoHidden"DockContent

c# - 基于int打开表单

c# - 将许多单元的 A* 路径拆分为单独的游戏框架

c++ - 创建新线程时在 lambda 中使用 unique_ptr 的线程安全性