Помимо состояния гонки, вы также должны знать, что повторение и изменение элементов в BitArray
намного медленнее, чем при Array{Bool}
. BitArray
s эффективно используют память и могут быть чрезвычайно быстрыми для чанкованных операций, но не подходят для доступа к отдельным элементам:
using BenchmarkTools, Random
function itertest!(a)
for i in eachindex(a)
@inbounds a[i] = !a[i]
end
end
julia> @btime itertest!(a) setup=(a=rand(Bool, 1000));
70.050 ns (0 allocations: 0 bytes)
julia> @btime itertest!(a) setup=(a=bitrand(1000));
2.211 μs (0 allocations: 0 bytes)
С другой стороны, для чанкованных операций производительность звездная:
function dottest!(a)
a .= .!a
end
julia> @btime dottest!(a) setup=(a=rand(Bool, 1000));
71.795 ns (0 allocations: 0 bytes)
julia> @btime dottest!(a) setup=(a=bitrand(1000));
6.904 ns (0 allocations: 0 bytes)