Xamarin iOS中的Grand Central Dispatch vs ThreadPool性能

All*_*n A 8 c# monodevelop xamarin.ios xamarin xamarin-studio

我已经查看了Xamarin的文档,并建议使用ThreadPool来实现多线程功能,如下所示:

http://docs.xamarin.com/guides/ios/application_fundamentals/threading

但是,已经完成了一项基准测试,表明Grand Central Dispatch比ThreadPool更具性能

http://joeengalan.wordpress.com/2012/02/26/execution-differences-between-grand-central-dispatch-and-threadpool-queueuserworkitem-in-monotouch/

因此,我的问题是,为什么Xamarin推荐ThreadPool而不是Grand Central Dispatch?Xamarin最终是否会将ThreadPool绑定到Grand Central Dispatch?什么时候选择一个而不是另一个?因为如果ThreadPool将由Xamarin优化,并最终胜过Grand Central Dispatch,那么我不想使用Grand Central Dispatch.

mig*_*aza 12

通过引入更多线程,您可以从机器,特别是移动设备中挤出很少的"额外性能".

就像我对这个职位,你认为链接(从2012年2月),以及注释第一你链接的文章段落解释了原因.

GCD和ThreadPool之间的区别在于Mono中的ThreadPool具有"慢启动"设置,因此在存在工作峰值时它不会创建超过必要的线程.您可以通过启动太多线程来轻松地使CPU匮乏,因此线程池在创建初始线程之后会限制自身,然后尝试每秒仅创建一个新线程(给予或接受,我不记得实际细节).

如果你想强制ThreadPool实际启动很多线程,你可以使用ThreadPool.SetMinThreads来控制它.

使用ThreadPool的原因是相同的代码可以在所有平台上运行.

请注意,该文档讨论了如何使用ThreadPool 不是其他标准.NET线程API,并且没有说明是否使用GCD.仅仅是线程池比使用线程滚动自己的管理更好.

也就是说API,这些天我建议人们使用任务并行库(TPL),这是一种比线程更高层次的思考后台操作的方式.此外,通过切换一行代码,您可以灵活地使用内置线程池或调度到GCD,从而跨平台获得相同的API.

  • 不同之处还在于GCD的线程池是系统范围的,因此可以更好地在多个应用程序中使用它们.GCD也注意不要盲目地开始新线程,但只在需要时才开始.整个异步编程模式在任何线程池实现中都能很好地工作.使用GCD的ThreadPool实现怎么样? (3认同)