私のアプリケーションのためにいくらかの並行性を得ることに取り組んでいます。私はコードのスニペットを持っていますが、それはスレッドが存在するかどうか不思議です。DISPATCH_QUEUE_PRIORITY_BACKGROUNDを使用すると、メインスレッドでdispatch_syncが機能しているのはなぜですか?
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0))
{
// For each location, update the user location
for location in locations
{
self.updateUserLocation(location)
}
}
}
func updateUserLocation(location:CLLocation)
{
_controller?.centerMapOnUser()
}
私はこれを実行すると、(私が起こっていると思う内容に応じて)正しくこのコードは別のスレッドにディスパッチされます。
何私は、なぜそれがメインスレッド上で実行可能sync
にディスパッチ呼を変えて混乱させる:
dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0))
原因:
理由I混乱している、私は(考えて)背景のスレッドを指定しています。私の理解から、バックグラウンドスレッドに作業をディスパッチしている間、メインスレッドを待機させています。しかし、それは起こっていることではなく、メインスレッドは引き続き作業を行います。これはOSによって最適化されていますか?この作業は別のスレッドで行う必要がありますか?
私の理論がどこで間違っているかを明確にすることはできますか?
説明をいただきありがとうございます – Aggressor