Queue
ios將所有的tasks (e.g. closures / function calls)都放在不同的queue中,然後os分派給不同thread去執行。所以依照你要達成的目的,要把task放在不同的queue中,這個動作稱為dispatching a task to a queue。
ios把thread的觀念用queue包覆起來,queue比較接近人類高階理解觀念,所以threading的複雜度就被隱藏了。
Main Queue
這是UI queue,所有跟UI相關的事情都只能放到這個queue中,中,只有一個main thread負責執行queue中的task。所以這是一個serial queue。Global Queue
general purpose queue,是concurrent queue,亦即有多threads可以執行global queue tasks。QoS就是quality of service,可以類比成此queue的priority。Main queue理所當然有最高的QoS,可以interrupt其他queue中的tasks,搶得CPU資源。
dispatching task to queue
可以放入一個closure (a block of code),可以async或是sync:注意我們不能在main queue裡面呼叫 queueA.sync { ... },因為這樣會block main queue,直到queueA裡面這個closure return。main queue是UI queue,所以一但被blocked,就會freeze UI。
創建自己的queues
1. serial queue:2. concurrent queue (非常少會做這件事,幾乎都使用Global Queue):
沒有留言:
張貼留言