![]() |
1
14
你正在经历的那种压倒性的感觉……这就是为什么发明了GCD。 在最基本的级别上,有线程,pthreads是线程的posix API,因此您可以在任何兼容的操作系统中编写代码,并期望它能够工作。GCD构建在线程之上(尽管我不确定它们是否真的使用pthreads作为API)。我相信GCD只适用于OS X和iOS,简而言之,这是它的主要缺点。 请注意,大量使用线程并需要高性能的项目实现了自己的线程池版本。GCD允许你避免(重新)发明轮子无数次。 |
![]() |
2
15
我来自另一个方向:开始使用
一些评论:
那么,让我们来分解可能的实现:
哪一个最快? 令人惊讶的是,这可能是上述三种情况中的任何一种。为了获得多线程的速度优势,您可能需要彻底重新组织算法。利益是否大于成本取决于具体情况。 哦,OP询问了线程池不合适的情况。简单的例子:如果您有一个紧密的循环,不需要每个循环计算很多个循环,那么使用线程池的成本可能会比不进行严重返工的好处要高。还要注意通过线程池进行lambda等函数调用与使用单个紧密循环的开销。 对于大多数应用程序,多线程是一种优化,因此在正确的时间和位置进行优化。 |
![]() |
3
4
GCD是一种苹果技术,不是最兼容跨平台的;pthread几乎可以在OSX、Linux、Unix、Windows的所有产品上使用。包括这个
toaster
GCD针对线程池并行性进行了优化。pthreads是(如您所说)非常复杂的并行构建块,您可以自行开发模型。如果你想了解更多关于pthreads和不同的并行模型的知识,我强烈建议你读一本关于这个主题的书。 |
![]() |
4
3
如任何声明性/辅助方法 openmp 或 Intel TBB GCD应该非常擅长 embarrassingly parallel 有问题,很可能会轻易击败na195’ve手动pthread ed parallel sort。不过,我建议你还是学习pthreads。您将更好地理解并发性,您将能够在每个特定的情况下应用正确的工具,而且如果没有其他任何原因(外面有大量基于pthread的代码),您将能够读取“遗留”代码。 |
![]() |
5
0
通常:每个pthread实现一个任务使用互斥锁(操作系统功能)。
|
![]() |
6
0
GCD提取线程并给您分派队列。它根据需要创建线程,同时考虑可用处理器核心的数量。 GCD是开放源码的,可以通过libdispatch库获得。FreeBSD包括8.1版的libDispatch。GCD和C块是苹果公司对C编程社区的主要贡献。我绝不会使用任何不支持GCD的操作系统。 |
![]() |
Namit Patel · 如何将数组作为返回值传递给线程? 7 年前 |
![]() |
Davi Wesley · 对线程使用参数 7 年前 |
![]() |
Jay Wang · 生产者/消费者实施:陷入消费者循环 7 年前 |
![]() |
Razonixx · 从线程内增加全局计数器变量,而不必等待每个线程 7 年前 |
![]() |
MohammadReza Vahedi · 返回响应后运行函数 7 年前 |
![]() |
AshR · 程序断断续续地使用main报告与线程本身不同的线程id 7 年前 |
![]() |
filo · 如何在x86上使用gcc强制执行内存排序 7 年前 |