最近学习了 Grand Central Dispatch,我发现多线程代码非常直观(使用 GCD)。我喜欢不需要锁的事实(以及它在内部使用无锁数据结构的事实),并且 API 非常简单。
现在,我开始学习 pthreads,我不禁对复杂性有点不知所措。线程连接、互斥体、条件变量——所有这些在 GCD 中都不是必需的,但在 pthread 中有很多 API 调用。
pthreads 比 GCD 有什么优势吗?是不是更有效率?是否存在 pthread 可以做 GCD 不能做的事情(不包括内核级软件)的正常用例?
在跨平台兼容性方面,我并不太在意。毕竟,libdispatch 是开源的,Apple 已将其闭包更改作为 GCC 的补丁提交,clang 支持闭包,并且已经(例如 FreeBSD),我们开始看到一些非 Apple 的 GCD 实现。我最感兴趣的是 API 的使用(具体的例子会很棒!)。