Dan*_*ark 7 pthreads objective-c nsthread grand-central-dispatch
一位同事最近建议我使用pthreads而不是GCD,因为它"更快".我并不反对它更快,但是pthreads 的风险是什么?
我的感觉是,他们最终不会像GCD那样几乎像白痴一样(我的团队中有50%是白痴).pthreads很难做对吗?
bam*_*s53 13
GCD和pthreads都是异步工作的方式,但它们有很大的不同.大多数GCD描述都是根据线程和线程池来描述的,但正如DrPizza所说的那样
专注于[线程和线程池]是错过了重点.GCD的价值不在于线程池,而在于排队.
Win32的Grand Central Dispatch:为什么我想要它
与pthreads等API相比,GCD有一些很好的优势.
GCD更多地鼓励和支持"并行海洋中的序列化孤岛".GCD可以很容易地避免大量的锁和互斥锁以及条件变量,这些是线程之间通信的正常方式.这是因为您将程序分解为任务,GCD处理任务输入并输出到后台的相应线程.因此,使用GCD进行编程可以让您完全按顺序编写,而不必担心人们经常在线程代码中担心的问题.这使代码更简单,更容易出错.
GCD可以为您进行扩展,因此程序使用尽可能多的并行性,就像您将程序分解为硬件所允许的任务之间的依赖关系一样.当然,将程序设计为可扩展通常很难,但是你仍然需要一些东西才能真正利用这项工作尽可能地并行运行.像GCD这样的工作窃取调度程序就是这样做的.
GCD是可组合的.如果您想要异步或并行地生成线程,那么当您使用的库做同样的事情时,您可能会遇到问题.假设您决定可以同时运行8个线程,因为在运行它的机器上,有多少线程对您的程序有效.然后说你在每个线程上使用的库做同样的事情.现在,您可以同时运行多达64个线程,这比您知道的对您的程序有效.
线程池解决了这个问题,但每个人都需要使用相同的线程池.GCD在内部使用线程池,并为每个人提供相同的池.
GCD提供了许多"源",可以轻松编写依赖于源或从源获取输入的事件驱动程序.例如,每当数据可用于在网络套接字上读取时,或者在计时器触发时,您可以非常轻松地设置队列以启动任务.
ipm*_*mcc 10
我不认为他们很难做对,但多年来一直使用许多不同的方法(pthreads,GCD,NSThread,NSOperationQueue等)我没有证据支持像"pthreads更快的断言". " 即使它们更快(我希望差异最小),我总是说,"使用最高级别的抽象来完成工作." 此外,避免过早优化.
有趣的是,GCD 非常快.我怎么看,可移植性是pthreads优于GCD的主要优势.如果这是OSX/iOS独家代码,我认为使用pthreads没有任何优势,缺乏相反的经验证据.
| 归档时间: |
|
| 查看次数: |
1461 次 |
| 最近记录: |