【发布时间】:2010-11-01 08:09:37
【问题描述】:
我的问题可能听起来有点幼稚,但我对多线程编程很陌生。
我正在编写一个处理传入外部数据的应用程序。对于到达的每个数据,都会按以下方式创建一个新任务:
System.Threading.Tasks.Task.Factory.StartNew(() => methodToActivate(data));
数据项到达速度非常快(每秒、半秒等),因此创建了很多任务。处理每项任务可能需要大约一分钟。在测试它时,我看到线程数一直在增加。如何限制创建的任务数量,使实际工作线程的数量稳定高效。我的电脑只有双核。
谢谢!
【问题讨论】:
-
数据一次到达多长时间?意思是,如果你现在得到一些数据,一秒钟后得到另一个数据,一秒钟后得到另一个数据,这样的循环运行多长时间?
-
我问的原因是,如果您长时间每秒(或更快)接收数据,则 1 分钟的处理时间将不起作用。在这种情况下,您不能简单地将所有对象都扔到线程池中。相反,我会将所有对象放入一个队列(.NET 4.0 阻塞集合应该在这里工作),并启动一些线程来轮询该队列中的工作项。如果您 24/7 每秒获取数据,您将永远无法赶上。你确定你在这里做的事情是正确的吗?
标签: multithreading parallel-processing task-parallel-library