multithreading - 与GCD相比,pthread是否提供任何优势?

标签 multithreading pthreads grand-central-dispatch

最近学习了Grand Central Dispatch,我发现多线程代码非常直观(使用GCD)。我喜欢不需要锁的事实(并且它在内部使用无锁数据结构),而且API非常简单。

现在,我开始学习pthread,我不禁对复杂性有点不知所措。线程连接,互斥锁,条件变量-所有这些在GCD中都是不必要的,但在pthread中有很多API调用。

与GCD相比,pthread是否提供任何优势?效率更高吗?在正常情况下,pthread可以完成GCD无法完成的工作(内核级软件除外)吗?

在跨平台兼容性方面,我不太担心。毕竟,libdispatch是开放源代码,Apple已将其关闭更改更改为GCC的补丁程序,clang支持关闭,并且已经(例如FreeBSD),我们开始看到一些非Apple的GCD实现。我对使用API​​最为感兴趣(具体示例非常棒!)。

最佳答案

您正在体验的那种压倒性的感觉..这就是发明GCD的原因。

在最基本的级别上,有线程,pthreads是用于线程的POSIX API,因此您可以在任何兼容的OS中编写代码,并期望它能正常工作。 GCD建立在线程之上(尽管我不确定它们是否实际使用pthreads作为API)。我相信GCD仅能在OS X和iOS上使用-简而言之,这是它的主要缺点。

请注意,大量使用线程并需要高性能的项目会实现自己的线程池版本。 GCD可让您避免在第十七次(重新)发明轮子。

关于multithreading - 与GCD相比,pthread是否提供任何优势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2144639/

相关文章:

c - 加入线程困惑

android - 如何在android ndk中获取线程名称

ios - 多个 dispatch_after 不能很好地工作

ios - 在 Xcode 中使用信号量进行调试 - Grand Central Dispatch - iOS

python - 在 Python 中断选择中使用信号处理程序很有趣

c - 使用原子和 futexes 锁定代码时无法找到竞争条件

windows - 如何根据子线程的线程 ID 查找进程的 pid?

java - AWT 中的 Java 线程池和 Java EventQueue 背后的概念是否有相似之处?

c - 线程是否应该始终使用 while 循环来保存 pthread_cond_wait 语句?

c - os_atomic_or2o 实际上做了什么?