0

このコードを実行しています

dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
      NSLog(@"Main Thread? %d", [NSThread isMainThread]);
      // non-trivial non-UI code here

});

NSLog、私が実際にメイン スレッドにいることを示していますが、... 私の印象では、非自明な非 UI コードは、dispatch_sync(何も使用しない場合とは対照的に) 使用するとはるかに高速に実行されます。

メインスレッドで実行している場合、より高速になる方法はありますか?

4

2 に答える 2

4

グローバルな同時 GCD キューには順序がありません。そのうちの 1 つを dispatch_sync() に渡すのは無駄であり、この場合、dispatch_sync() は指定されたブロックを直接実行するだけです。

^{...}();
于 2013-02-07T01:54:38.287 に答える
1

実行中のスレッドの数を制限することで、技術的には確実にパフォーマンスが向上する可能性がありますが、これはお勧めできません。かなりの時間がかかるタスクがある場合 (実質的な意味、応答しない UI によってユーザー エクスペリエンスが影響を受けるdispatch_asyncかどうか) は、インライン ブロック (閉鎖) を使用して新しいスレッドを使用するだけです。最適なオプションは、アルゴリズムを最適化してタスクの長さを改善することです。

メイン スレッドで実行しても、速度に大きな違いがあることに気付くことはありません。

于 2013-02-07T01:53:06.887 に答える