多线程独立任务

Posted

技术标签:

【中文标题】多线程独立任务【英文标题】:Multi threading independent tasks 【发布时间】:2012-03-13 22:56:37 【问题描述】:

我有 N 个任务,它们是独立的(即写入不同的内存地址),但完成的时间并不完全相同(例如,从 2 秒到 10 秒)。我有 P 个线程。

我可以将我的 N 个任务分成 P 个线程,并启动我的线程。最终,最后会剩下一个线程来完成最后几个任务,这不是最优的。

我还可以启动 P 线程,每个线程有 1 个任务,WaitForMultipleObjects,并重新启动 P 线程等(这就是我目前所做的,因为与任务相比,创建线程的开销很小)。但是,这也不能解决问题,在某个时候仍然会有 P-1 个线程在等待最后一个线程。

有没有办法启动线程,一旦线程完成任务,就继续下一个可用任务,直到所有任务都完成?

谢谢!

【问题讨论】:

只是让您知道,您可能不想自己尝试这样做。使并发算法/结构既快速又正确比听起来更难。查看Intel's TBB。 【参考方案1】:

是的,它被称为线程池。这是一种非常普遍的做法。

http://en.wikipedia.org/wiki/Thread_pool_pattern

基本上,您创建一个任务队列(带有参数的函数指针),然后将任务推送到那里。您有 N 个线程正在运行,它们执行以下循环(原理图代码):

while (bRunning) 
   task = m_pQueue.pop();
   if (task) 
      executeTask(task);
   
   else 
    //you can sleep a bit here if you want
    

有更优雅的方式来实现它(避免休眠等),但这就是它的要点。

【讨论】:

好的,谢谢...我已经使用了线程池,但只是为了消除启动线程的必要性,而不是解决这个问题。谢谢!

以上是关于多线程独立任务的主要内容,如果未能解决你的问题,请参考以下文章

Java 多线程

一.多线程技能

多线程概念

java多线程以及Android多线程

多线程编程基础知识

Java多线程