最近,一位同事建议我使用p线程而不是GCD,因为它“要快得多”。我并不不同意它更快,但是risk对线程有什么影响呢?
我的感觉是,他们最终不会像GCD那样的白痴(而我的一个团队是50%的白痴)。线程很难找到正确的答案吗?
发布于 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线程。
发布于 2013-01-06 00:03:00
我不认为它们很难纠正,但是这些年来我使用了许多不同的方法(线程、GCD、NSThread、NSOperationQueue等等)。我没有任何证据来支持这样的断言:“线程要快得多。”即使它们的速度更快(我希望差别最好是微不足道的),我也总是说,“使用最高级别的抽象来完成任务。”同时,避免预成熟的优化.
从轶事上说,GCD速度相当快。在我看来,与GCD相比,可移植性是线程的主要优势。如果这是OSX/iOS排他性代码,我认为没有任何好处使用p线程,没有相反的经验证据。
发布于 2014-03-20 09:01:51
忽略其他经过深思熟虑的技术原因,因为与无关。你不是在为基准写软件,是吗?在某个时候,用户会坐在你的设备前面,尝试使用它。你知道如果你使用线程而不是GCD会发生什么吗?所发生的是在同时进行其他软件多任务处理的情况下,您的软件不能很好地扩展,因为它将使用与争夺CPU,假设它是,同时运行的唯一软件。这太疯狂了。再也没有人运行单个任务OSes了。即使是单个任务,iOS也会在后台运行很多东西。
相反,如果您正在运行的所有程序都使用GCD,操作系统可以缩放它们的队列上运行的并发任务的数量,从而更好地匹配实际处理器的数量,从而减少任务切换的开销。
如果您的程序不需要伪实时、低延迟,并因此需要一个专门的线程来处理可用的东西(也许您同事的定义是“更快”),那么GCD很有可能会更好地使用他们设备上可用的资源。即使GCD的API是可怕的或缓慢的,它将是值得使用它的其他解决方案,而不是跨越不同的进程。
https://stackoverflow.com/questions/14177689
复制相似问题