代码之家  ›  专栏  ›  技术社区  ›  moinudin

线程模型

  •  1
  • moinudin  · 技术社区  · 17 年前

    while thread = nextAvailableThread():
      thread.doWork(data)
    

    这样,当一个线程完成时,它会触发nextAvailableThread()返回这个刚刚完成的线程。这个模型将使在线程之间分布不均匀的数据块变得更加容易,因为您可以将下一个数据块传递给下一个可用线程,并生成接近最优的数据分布。

    我特别喜欢在C++中使用这个,但是我很高兴这里有这样的东西存在于任何语言中。

    编辑:线程池看起来就像我想的那样。那么,C++实现有什么建议吗?

    5 回复  |  直到 17 年前
        1
  •  3
  •   Andrew Duffy    17 年前

    您可以使用阻塞工作队列和一组工作线程。Java有 ThreadPoolExecutor

        2
  •  3
  •   Yishai    17 年前

    听起来你在寻找一个线程池。 Here

    编辑: Here

        3
  •  1
  •   aJ.    17 年前
        4
  •  1
  •   vgru    17 年前

    你可以查一下 Task Parallel Library

    这个库使用起来非常简单,但里面也有很多强大的功能。以最简单的形式,您可以这样使用它:

    Parallel.For(0, 100, delegate(int i) { 
       a[i] = a[i]*a[i]; 
    });
    

    最美妙的是,每当一个内核准备好执行时,它就会执行每个任务。在 N 任何给定时刻的活动线程。

    this session

        5
  •  0
  •   Shing Yip    17 年前

    生产商/消费者模式可能就是您想要的。

    在最基本的配置中,您需要两个并发组件:thradsafe队列和工作线程池。你可以在网上找到很好的例子。