分而治之和分叉和加入的区别
difference of divide and conquer & fork and join
在C++中,分而治之有什么区别;分叉和连接?fork和join是分而治之的特殊情况吗?因为fork和join只适用于并行性?谢谢
"分而治之"是一种通用的编程方法,用于将较大的问题分解为更可解的子问题,单独求解(有时递归求解),最后通过组合子问题的答案来产生大问题的答案。这是一个并非C++特有的想法。
"Fork"answers"Join"名称特定的并行原语在许多语言中可用。"Fork"导致启动另一个执行线程;"联接"使当前线程等待另一个线程完成并同步。我相信C++14标准内置了这样的基元。许多其他语言都没有内置这个功能,但它通常可以通过库(包括C++的早期版本)获得。
可以使用"Fork"answers"Join"来实现通过并行增强的"Divide and conquer"。像这样使用,"fork"将线程发送到单独的子程序块,而"join"作为子问题完成的一个步骤是必要的。但"联接"并没有具体计算出"大"问题的综合答案。您可能需要更多的代码,而不仅仅是fork和join。
基本上,Fork-Join将手头的任务分解为小任务,直到小任务足够简单,可以在不进一步分解的情况下解决为止。这就像一个分而治之的算法。在这个框架中需要注意的一个重要概念是,理想情况下没有工作线程是空闲的。他们实现了一种窃取工作的算法,空闲的工人从忙碌的工人那里窃取工作。
Result solve(Problem problem)
{
if (problem is small)
directly solve problem
else
{
split problem into independent parts
fork new subtasks to solve each part
join all subtasks
compose result from subresults
}
}
C++14存在一些与fork&加入,您可以从此网站阅读更多信息(http://www.meetingcpp.com/index.php/br/items/a-look-at-c14-papers-part-2.html)
相关文章:
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- int(c) 和 c-'0' 之间的区别。C++
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- C++ - "!pointer"和"pointer == nullptr"的区别?
- C++ 使用 assign 函数的字符串与直接使用 '=' 更改值的字符串之间的区别
- std::atomic和std::condition_variable wait,notify_*方法之间的区别
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 在 const 函数中通过引用和指针返回之间的区别
- 我想知道长双倍和双倍之间的区别
- 返回常量对象引用 (getter) 和仅返回字符串有什么区别?
- 返回递归调用和仅递归调用的区别
- Qt:remove() 和 rmdir() 有什么区别
- 这 4 个 lambda 表达式之间有什么区别?
- 结构体 S { int align; } 之间的区别;(struct 关键字后的名称)和 struct { int al
- (double) 和 double() 之间的区别
- 将向量作为类>(值)<向量启动和向量<类>[值]有什么区别
- typedef 枚举和枚举类有什么区别?
- &C::c 和 &(C::c) 有什么区别?
- 分而治之和分叉和加入的区别