【问题标题】:Does the .Net ThreadPool take other applications into account?.Net ThreadPool 是否考虑了其他应用程序?
【发布时间】:2020-06-08 14:04:23
【问题描述】:

这个答案 (https://stackoverflow.com/a/6000891/197229) 提供了有关现代 .Net 线程池 (https://docs.microsoft.com/en-us/dotnet/api/system.threading.threadpool?view=netcore-3.1) 的有趣信息

从 .NET Framework 4 开始,线程的默认大小 进程的池取决于几个因素,例如进程的大小 虚拟地址空间。进程可以调用 GetMaxThreads 方法 确定线程数。线程中的线程数 可以使用 SetMaxThreads 方法更改池。每个线程 使用默认堆栈大小并以默认优先级运行。

我的应用程序应该与其他几个应用程序一起在应用服务器上运行。 .Net 在自动分配线程池大小时是否完全分开处理每个应用程序,如果不应该我应该?我的想法是,如果 10 个进程每个都有一个 25 个线程池,那是 很多 个线程吗?

【问题讨论】:

  • 您的问题是 .NET Framework 4 特有的,还是您也在考虑 (ASP).NET Core 或最新的 .NET Framework 4.8?
  • @dymanoid 4.0 和更新版本 - 因为线程池在 4 中发生了变化。不知道如何在标签中充分表达这一点!
  • 我可能会删除 .net-4.0 标签:“用于与 .NET Framework 4.0 相关的问题”。

标签: .net multithreading .net-core


【解决方案1】:

我的想法是,如果 10 个进程每个都有 25 个线程池

没错,每个应用程序都有自己的托管线程池。

这么多线程?

并非如此,一个典型的系统在任何时间点都会有数千个线程,其中大多数会处于休眠状态。除了考虑唤醒(定时器、套接字选择、粗同步,如互斥锁等)之外,休眠线程不使用任何资源。

【讨论】:

  • 举个例子,我开发的一款用于实时监控飞行模拟器系统的软件在每个时间点都有 124 个线程,总的来说,我从未见过它需要超过2.5% 的 CPU。通常,分配好线程并准备好运行比发现自己需要启动线程要好。
  • 在 99% 的情况下,听起来“让它为所欲为”是最好的建议!
  • 相反,在任何中等复杂的应用程序中,您都需要多个线程池来运行您的任务。 CPU 绑定操作(如图像调整大小)不应使 I/O 绑定操作(首先下载图像以调整大小)饿死,因此您将每个任务排队到另一个池中。
  • 我的意思是不要害怕线程,预先分配的线程就像蜘蛛一样,朋友们!
  • @Blindy 一个实时飞行模拟器的系统在每个时间点都有 124 个线程,总的来说我从来没有见过它占用超过 2.5%:这有什么意义这么多线程,如果他们没有充分利用?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-25
  • 1970-01-01
  • 2013-12-31
  • 1970-01-01
  • 2020-05-25
相关资源
最近更新 更多