我来自Python,全力以赴地进入C ++。而且,我最近提出的一个问题是:C ++中是否有广泛使用的开源多处理抽象库?我正在考虑使多处理(ala fork)更容易管理的东西,类似于Python的multiprocessing stdlib库。
我想没有这样的事情。我完全希望有一个 Boost :: Process ,就像有Boost::Thread一样。
答案 0 :(得分:1)
MPI会合适吗?我认为一旦你理解它就很容易编程。它确实是多进程的
答案 1 :(得分:0)
Intel TBB和M icrosoft PPL是两个基于任务的多线程库。
答案 2 :(得分:0)
答案 3 :(得分:0)
查看http://pocoproject.org/(Process :: launch())和http://www.highscore.de/boost/process/。如果我不得不选择的话,我会选择第二个,但它们实际上远远不同于Python提供的便利(叹气)。
答案 4 :(得分:0)
现在有对多处理的 Boost 支持:https://www.boost.org/doc/libs/1_76_0/doc/html/boost_process/tutorial.html
从我的编译器(LLVM/clang)返回的一些消息来看,它看起来像 boost::process
是 POSIX fork
的包装器(以及对应的 Windows 包装器),就像 POCO 库一样。
答案 5 :(得分:-1)
OpenMP(Open Multi-Processing )是我所知道的http://en.wikipedia.org/wiki/OpenMP唯一的库 - 然而,它并不像Python那样通过创建新进程来处理事务。 OpenMP是一个编译器扩展,由Microsoft和GNU GCC支持。
示例:OpenMP sieve of eratosthenes
// 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;
}