2017-08-30 23 views
1

哪個線程被Swift的sleep:方法阻塞?哪個線程會被睡眠阻塞:在swift中

let customConcurrentQueue = DispatchQueue(label: "CustomConcurrentQueue", attributes: .concurrent) 
customConcurrentQueue.async { 
    sleep(5) 
    print("1") 
} 
print("2") 

睡眠方法會阻塞主線程嗎?

+0

那麼按照哪個順序執行'print'語句? '1 2'還是'2 1'? – LinusGeffarth

+0

您的customConcurrentQueue中的塊將立即排隊,但顯然它不會窒息/阻塞其當前線程,因爲它是異步的。然後,立即打印「2」會發生,它會阻塞/阻塞當前隊列,直到它完成打印,並且在customConcurrentQueue打印「1」5秒鐘後,* sleep *發生在customConcurrentQueue上,而不是您寫的線程' customConcurrentQueue.async sleep(5) print(「1」) } print(「2」) ' – Honey

回答

2

不,主線程不會被阻塞。

這是因爲您正在撥打customConcurrentQueue上的async塊,它允許主線程立即繼續運行。如果您使用sync,主線程將一直等到sync塊完成運行。