我無法找到有關@async
宏的詳細文檔。從關於並行性的文檔中我知道在Julia進程中只有一個系統線程,並且在yieldto
函數的幫助下正在進行明確的任務切換 - 如果我對此有錯,請糾正我的錯誤。Julia:瞭解何時發生任務切換
對於我來說,僅僅通過查看代碼並知道它何時發生似乎非常重要,對於我來說很難理解這些任務切換何時發生。
據我瞭解yieldto
代碼中的某處(或在代碼調用的某些函數中)需要在那裏以確保系統不會被卡住只有一個任務。
例如,當存在read
操作時,在讀取內部可能有wait
調用,並且在執行wait
時可能有yieldto
調用。我認爲沒有yieldto
的調用,代碼就會停留在一個任務中;然而運行下面的例子似乎證明了這個假設是錯誤的。
@async begin # Task A
while true
println("A")
end
end
while true # Task B
println("B")
end
此代碼產生以下輸出
BA
BA
BA
...
這是非常不清楚我在哪裏,在上面的代碼中@async
宏創建任務內的任務切換髮生。
我該如何看看某些代碼中發生任務切換的點?