首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >风险评估:使用线程(vs.gcd或NSThread)

风险评估:使用线程(vs.gcd或NSThread)
EN

Stack Overflow用户
提问于 2013-01-05 23:45:04
回答 4查看 1.6K关注 0票数 7

最近,一位同事建议我使用p线程而不是GCD,因为它“要快得多”。我并不不同意它更快,但是risk对线程有什么影响呢?

我的感觉是,他们最终不会像GCD那样的白痴(而我的一个团队是50%的白痴)。线程很难找到正确的答案吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-01-06 00:43:47

GCD和p线程都是异步工作的方式,但它们有很大的不同。大多数关于GCD的描述都是用线程和线程池来描述的,但是正如DrPizza所说的那样。

把注意力集中在线程和线程池上,就会错过重点。GCD的价值不在于线程池,而在于队列。 http://blog.quiscalusmexicanus.org/post/4906301357/grand-central-dispatch-for-win32-why-i-want-it

GCD在API方面有一些很好的好处,比如p线程。

  • GCD为鼓励和支持“并行海洋中的序列化岛屿”做了更多的工作。GCD使得避免许多锁、互斥和条件变量成为线程间正常的通信方式变得非常容易。这是因为您将程序分解为任务,GCD处理将任务输入和输出到幕后的适当线程。因此,使用GCD编程可以让您大量地按顺序编写,而不必太担心人们在线程代码中经常担心的事情。这使得代码更简单,更不容易出错。
  • GCD可以为您进行缩放,因此程序使用的并行性与您将程序分解成的任务和硬件允许的任务之间的依赖关系一样多。当然,设计可扩展的程序通常是困难的,但是您仍然需要一些东西来实际利用这些工作来尽可能多地并行运行。像GCD这样的偷取调度程序就能完成这部分任务。
  • GCD是可合成的。如果您显式地为您想要异步或并行地执行的事情生成线程,那么当您使用的库做同样的事情时,您可能会遇到问题。假设您决定可以同时运行8个线程,因为如果程序运行在机器上,那么就会有多少线程对程序有效。然后假设在每个线程上使用的库做同样的事情。现在,您可以同时运行多达64个线程,这比您所知道的对您的程序有效的还要多。 线程池解决了这个问题,但是每个人都需要使用相同的线程池。GCD在内部使用线程池,并向每个人提供相同的池。
  • GCD提供了大量的“源”,可以轻松地编写依赖于或从源获取输入的事件驱动程序。例如,您可以很容易地设置一个队列,以便在每次可以在网络套接字上读取数据时或在计时器触发或其他任何情况下启动一个任务。
票数 13
EN

Stack Overflow用户

发布于 2013-01-06 00:03:00

我不认为它们很难纠正,但是这些年来我使用了许多不同的方法(线程、GCD、NSThread、NSOperationQueue等等)。我没有任何证据来支持这样的断言:“线程要快得多。”即使它们的速度更快(我希望差别最好是微不足道的),我也总是说,“使用最高级别的抽象来完成任务。”同时,避免预成熟的优化.

从轶事上说,GCD速度相当快。在我看来,与GCD相比,可移植性是线程的主要优势。如果这是OSX/iOS排他性代码,我认为没有任何好处使用p线程,没有相反的经验证据。

票数 10
EN

Stack Overflow用户

发布于 2014-03-20 09:01:51

忽略其他经过深思熟虑的技术原因,因为无关。你不是在为基准写软件,是吗?在某个时候,用户会坐在你的设备前面,尝试使用它。你知道如果你使用线程而不是GCD会发生什么吗?所发生的是在同时进行其他软件多任务处理的情况下,您的软件不能很好地扩展,因为它将使用争夺CPU,假设它是,同时运行的唯一软件。这太疯狂了。再也没有人运行单个任务OSes了。即使是单个任务,iOS也会在后台运行很多东西。

相反,如果您正在运行的所有程序都使用GCD,操作系统可以缩放它们的队列上运行的并发任务的数量,从而更好地匹配实际处理器的数量,从而减少任务切换的开销。

如果您的程序不需要伪实时、低延迟,并因此需要一个专门的线程来处理可用的东西(也许您同事的定义是“更快”),那么GCD很有可能会更好地使用他们设备上可用的资源。即使GCD的API是可怕的或缓慢的,它将是值得使用它的其他解决方案,而不是跨越不同的进程。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14177689

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档