【发布时间】:2016-09-06 23:15:15
【问题描述】:
我将使用“进程”来指代将要并行发生的工作,而“入队”来指代将用于启动该进程的任何进程(无论是 Task.Run、ThreadPool. QUWI,new Thread() ... 随便)。
我们有一个性能敏感的程序,它产生多个并行进程来收集数据。
我们在生成过程中遇到问题,进程没有立即开始。
具体来说,如果我们准备一个进程,启动一个计时器,将进程排入队列,并将计时器作为进程中的第一个动作进行检查……那么我们会看到时间延迟偶尔会延长到 100 秒甚至 1000 毫秒.
鉴于进程本身应该只运行 3-10 秒,因此在进程入队和激活之间有 2 秒的延迟是一个主要问题。
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
目前我们的实现开始使用 TP.QUWI,然后我们转向使用 Task.Run。 我们最初的调查将我们引导到 Threadpool 使用的 Thread-Creation-Strategy 并使用 ThreadPool.SetMinThreads(),因此我们正在追求这个角度,看看这是否能彻底解决问题。
但是,如果我们的目标是让流程在入队后立即开始,是否还有其他我们应该关注的变化/方法?
【问题讨论】:
-
您的应用程序是否将
ThreadPool广泛用于其他对时间不敏感的“进程”?为什么时机对你来说如此重要? -
我不明白这些问题,@svick?是的,我们还将
ThreadPool用于一些不在性能关键路径中的后台任务,但我看不到相关性。就像我说的那样......该程序对性能很敏感......我不明白为什么这样做的原因很重要?
标签: c# multithreading parallel-processing task-parallel-library threadpool