问题标签 [queueuserworkitem]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
1092 浏览

vb.net - 为数百万个线程使用 ThreadPool.QueueUserWorkItem

我需要处理数百万个文件。目前,我使用自定义线程管理器来完成工作,使用 DataGridView 来跟踪线程和计时器来检查是否可以启动更多线程;有点像(sudo):

这有很多缺点,主要是 CPU 和内存使用率很高,因为上述每个线程都处理一个完整的目录,而不是独立地处理每个文件。

所以我重写了这个过程。现在我有一个类将在文件级别执行该过程并将结果报告回主线程;像这样:

上面的类就像一个魅力,非常快,几乎不使用内存,几乎没有 CPU。尽管我只能使用 Threading.Thread 进程用几百个线程对此进行测试。

现在我想使用 ThreadPool.QueueUserWorkItem 为每个文件执行上述类,从而允许系统控制在任何给定时间运行的线程数。但是,我知道我不能在不锁定服务器的情况下将数百万个线程转储到 ThreadPool 中。我对此做了很多研究,我只能找到关于将 ThreadPool.QueueUserWorkItem 用于几个线程的示例/讨论。我需要的是触发数百万个这些线程。

所以,我有两个问题:1)我是否应该尝试使用 ThreadPool.QueueUserWorkItem 来运行这么多线程,以及 2)下面的代码是否足以在不锁定服务器的情况下执行此过程?

到目前为止,这是我的代码:

0 投票
1 回答
79 浏览

tfs - 复制的 WIT 不会计算 Backlog 中的剩余时间

我复制了 WIT 的“用户故事”,将其作为新的 WIT 并将其重命名为“PR”。工作项也有“剩余工作”和“原始估计”。但是当我输入时间时,它不会在板上计算。

另一方面,“Bug”得到的计算恰到好处。我已经检查了字段并且它们是相同的(字段控制、VSTS.Sheduling.RemaningWork、Type Double、reportable Measure、公式 SUM 等)

有小费吗?

0 投票
1 回答
854 浏览

asp.net - 带有 WaitCallback 的 QueueUserWorkItem 获取返回值

我正在运行一个从各种商店导入产品信息的网站。这些提要可能非常大,有些高达 1GB。目前我通过在循环中调用导入函数来导入这些:

这可行,但随着提要的大小或数量增加,处理它们的时间也会增加。所以我不那么优雅地增加了超时时间:

现在,我想运行这些任务,而不必在开始下一个任务之前等待每个任务完成,所以我尝试了这里描述的设置,首先使用测试功能TestMultiThread

然后我记录了这些错误:

我不明白这种记录顺序,为什么我没有看到s = <value>20 个唯一值(但s=20在开始时甚至连续 3 次并且丢失了s=2s=1为什么i总是 21 在函数中TestMultiThread

0 投票
2 回答
541 浏览

c# - 为什么我的线程池的线程不能同时完成

在 main 函数中,我编写了以下代码:

和线程函数如下:

输出是:

你可以注意到所有线程完成的整个过程持续了将近 28 秒,据我了解,这 100 个线程可能无法同时完成,但也不会有那么多时间不同。

我也设置了

而且只分配100个线程,所以不应该有任何线程等待其他人停止,对吧?

这是完整的代码

0 投票
1 回答
37 浏览

c# - QueueUserWorkItem 奇怪的行为

ThreadPool.QueueUserWorkItem()用来启动一些后台任务。

ThreadPool并发行为很奇怪。我的 CPU 有 4 个逻辑核心。我希望只有 4 个正在运行的线程。但是,示例代码显示了不同的行为。

  • 1/2/3时间,为什么会触发mores线程?

这是示例代码:

输出

0 投票
2 回答
560 浏览

c# - ThreadPool.QueueUserWorkItem 完成后调用方法

我正在开发一个用 c# 编写的控制台应用程序

这个应用程序的目的是浏览所有驱动器和文件并对它们做一些事情。但是用一个线程遍历所有文件是一个耗时的过程,这不是我的目标。

所以我决定用ThreadPool这样的方式处理它:

问题是Console.WriteLine("Job is done.")在所有线程完成之前执行。我已经阅读了一些问题和答案,但没有一个能解决我的问题。

ThreadPool在所有线程完成工作后如何调用方法?

注意:您可能知道,我不知道将创建多少线程,因为我不知道那里有多少文件。并且设置超时不是一种选择。

0 投票
0 回答
50 浏览

asp.net - ASP.NET 中的后台线程 - 什么机制最好?

首先,我知道“正确”的答案是不要在 ASP.NET Web 应用程序中执行后台线程。我们有充分的理由这样做,所以请接受它对我们的用例有意义的假设。

我们的后台处理通常受 CPU 限制(有时可能受 IO 限制)。通常需要 2 秒到 2 分钟(有时会更长,长达一个小时)。我们将后台工作人员的数量限制为服务器上核心数量的 1.5 倍。

我还假设最好在 ASP.NET 环境中使用现有的线程池。我的代码将限制线程数,但我猜最好从现有池中提取。

那么这就引出了一个问题,创建线程的最佳方法是什么?

  1. ThreadPool.QueueUserWorkItem
  2. HostingEnvironment.QueueBackgroundWorkItem()
  3. 任务运行()
  4. 还有什么?

HostingEnvironment.QueueBackgroundWorkItem() & Task.Run() 是否来自 ASP.NET 线程池?