我搜索了各种来源,但并不真正理解使用NSThreads和GCD 之间的区别.我是OS X平台的新手,所以我可能完全误解了这个.
从我在线阅读的内容来看,GCD似乎与基本线程(POSIX NSThreads等)完全相同,同时添加了更多技术术语("块").它似乎只是使基本的线程创建系统(创建线程,运行函数)过于复杂.
GCD究竟是什么?为什么它会优于传统的线程?应该何时使用传统线程而不是GCD?最后是否有GCD奇怪语法的原因?("块"而不是简单地调用函数).
我在Mac OS X 10.6.8 Snow Leopard上,我不是为iOS编程 - 我正在为Mac编程.我在Cocoa中使用Xcode 3.6.8,创建了一个GUI应用程序.
macos cocoa multithreading objective-c grand-central-dispatch
在最近学习了Grand Central Dispatch之后,我发现多线程代码非常直观(使用GCD).我喜欢这样一个事实,即不需要锁(事实上它在内部使用无锁数据结构),并且API非常简单.
现在,我开始学习pthreads,我不禁对复杂性感到不知所措.线程连接,互斥体,条件变量 - 所有这些事情在GCD中都不是必需的,但在pthreads中有很多API调用.
pthreads是否比GCD有任何优势?它效率更高吗?是否存在正常使用情况,其中pthreads可以执行GCD无法执行的操作(不包括内核级软件)?
在跨平台兼容性方面,我并不太关心.毕竟,libdispatch是开源的,Apple已经将其关闭更改作为GCC的补丁,clang支持关闭,并且已经(从FreeBSD开始),我们开始看到一些非Apple的GCD实现.我最感兴趣的是使用API(具体的例子会很棒!).