在 Julia 怎麼用 async 跟 sync
這個問題在官方文件中並沒有詳細記載,所以覺得值得紀錄一下。
查閱 @async
的文件會講說,他會用一個 Task
把後面的表達式包裝起來,並且將他掛到排程器的佇列(queue)中。意思就是將表達式包裝成一個任務,並放到佇列中等待 CPU 核心的資源來執行他。
然而通常會搭配 @sync
來使用,@sync
的文件中提到,他會等到後面的 @async
、@spawn
、@spawnat
及 @distributed
都執行完畢。
使用情境比較像是(修改自這篇 stackoverflow)
1 | for (idx, pid) in enumerate(workers()) |
@sync
會等待這個 block 中的 @async
都執行結束才結束,@async
可以讓你指派一些非同步處理的任務,像是多執行緒或是多行程的平行運算。
@sync
就比較像 python 當中的 join()
。