根据官方文档(https://julia-doc.readthedocs.io/en/latest/manual/parallel-computing/)描述,@sync,@async将任意表达式包装到任务中,这意味着,对于属于其范围内的任何内容,Julia都将开始运行此任务,然后继续执行脚本中接下来的其他代码,而不是等待当前任务完成,再去执行接下来的代码。下面是一些代码样例
没有使用宏:
# 用例1
@time sleep(2) # 2.005766 seconds (13 allocations: 624 bytes)
使用宏:
可以看到,Julia允许脚本继续(并允许@time宏完全执行),无需等待@async任务(在本例中是休眠两秒钟)完成。
#用例2
@time @async sleep(2)
# 0.028081 seconds (2.19 k allocations: 138.969 KiB)
#Task (runnable) @0x0000000009a745d0
相比之下,@sync宏将“等到以下所有宏 @async、@spawn、@spawnat和@parallel 定义的动态封闭都完成为止 才会执行。因此,我们看到: