5

我来自 Python,全速进入 C++。而且,我最近提出的一个问题是:C++ 中是否有广泛使用的开源多处理抽象库?我正在考虑使多处理(ala fork)更易于管理的东西,类似于 Python 的多处理stdlib 库

我想没有这样的东西。我完全期望会有一个Boost::Process就像有一个Boost::Thread一样。

4

6 回答 6

1

MPI适合吗?我认为一旦你理解了它就很容易编程。它是真正的多进程

于 2013-02-04T17:09:54.850 回答
1

OpenMP (Open Multi-Processing ) 是我所知道的唯一一个http://en.wikipedia.org/wiki/OpenMP库——但是它并没有像 Python 通过创建新进程来处理事情。OpenMP 是一个编译器扩展,由MicrosoftGNU GCC支持。

示例:埃拉托色尼的 OpenMP 筛

// odd-only sieve
int eratosthenesOdd(int lastNumber, bool useOpenMP)
{
  // enable/disable OpenMP
  omp_set_num_threads(useOpenMP ? omp_get_num_procs() : 1);
  // instead of i*i <= lastNumber we write i <= lastNumberSquareRoot to help OpenMP
  const int lastNumberSqrt = (int)sqrt((double)lastNumber);
  int memorySize = (lastNumber-1)/2;
  // initialize
  char* isPrime = new char[memorySize+1];
  #pragma omp parallel for
  for (int i = 0; i <= memorySize; i++)
    isPrime[i] = 1;
  // find all odd non-primes
  #pragma omp parallel for schedule(dynamic)
  for (int i = 3; i <= lastNumberSqrt; i += 2)
    if (isPrime[i/2])
      for (int j = i*i; j <= lastNumber; j += 2*i)
        isPrime[j/2] = 0;
  // sieve is complete, count primes
  int found = lastNumber >= 2 ? 1 : 0;
  #pragma omp parallel for reduction(+:found)
  for (int i = 1; i <= memorySize; i++)
    found += isPrime[i];
  delete[] isPrime;
  return found;
}
于 2013-02-04T17:10:58.477 回答
0

Intel TBBMicrosoft PPL是两个基于任务的多线程库。

于 2013-02-04T17:09:22.167 回答
0

我正在寻找POCO库,其中有一个关于多处理的部分。
我也在考虑fork(),它也有一些 Windows 实现。

于 2014-07-14T13:58:28.100 回答
0

看看http://pocoproject.org/ (Process::launch()) 和http://www.highscore.de/boost/process/。如果必须选择,我会选择第二个,但实际上它们都与 Python 提供的便利相去甚远(叹息)。

于 2015-09-23T08:28:09.500 回答
0

现在有对多处理的 Boost 支持:https ://www.boost.org/doc/libs/1_76_0/doc/html/boost_process/tutorial.html

从我的编译器(LLVM/clang)返回的一些消息来看,它看起来像是boost::processPOSIX 的包装器fork(以及 Windows 的相应包装器),就像 POCO 库一样。

于 2021-06-20T23:40:16.213 回答