我以为多线程很简单:就是一个装饰器的事儿。
这是我不知道哪次搜索到的资料记下的笔记,我基本就是按照这个执行的。
我的电脑CPU如下:
应该是6核12线程吧。
于是我做了个测试:
using BenchmarkTools
function fun2()
resmat = zeros(100000, 10)
@inbounds Threads.@threads for j=1:10
@inbounds for i=1:100000
resmat[i, j]=1.0
end
end
end
@btime fun2()
我将100000×10
的矩阵,按列分成10个线程,然后对第1个index
在各个线程内进行循环。
然后我在外面用powershell
运行脚本。
PS F:\Documents\JuliaProgramme\20220819多线程测试> julia -t 10 .\多线程测试.jl
1.581 ms (53 allocations: 7.63 MiB)
PS F:\Documents\JuliaProgramme\20220819多线程测试> julia -p 10 .\多线程测试.jl
1.874 ms (8 allocations: 7.63 MiB)
PS F:\Documents\JuliaProgramme\20220819多线程测试> julia -p 10 -t 10 .\多线程测试.jl
1.590 ms (53 allocations: 7.63 MiB)
我在外面开10个线程/10个进程/10线程+10进程,结果没差啊。程序也没有报错,我的笔记记录的用法应该也没有问题。
这是为什么呢?