我正在尝试通过使用 Grand Central Dispatch 的 dispatch_apply 方法来并行执行多个独立任务来加速我的 iOS 应用程序。但是,这些任务共享一个只读资源(一个大的 uint8_t 数组),该资源通过只读的非原子对象属性进行访问。由于它是只读资源,因此不需要同步访问。然而,共享只读数组使执行变得非常缓慢。它甚至比所有任务的串行执行还要慢。但是,如果我为每个线程制作一个数组的本地副本,则任务执行得非常快。
我不明白为什么我必须为每个线程创建一个副本以在只读资源的情况下从 GCD 中受益。是否有任何自动内部同步会减慢执行时间,因为 GCD 不知道它是只读资源?是否可以在不为每个线程创建资源的本地副本的情况下以某种方式防止速度变慢?
非常感谢您!