julia> function foo()
c=Condition()
for i in 1:10^6
notify(c)
end
end
foo (generic function with 1 method)
julia> foo()
julia> @time foo()
158.151 milliseconds (2000 k allocations: 122 MB, 4.75% gc time)
function notify(c::Condition, arg::ANY=nothing; all=true, error=false)
if all
for t in c.waitq
schedule(t, arg, error=error)
end
empty!(c.waitq)
elseif !isempty(c.waitq)
t = shift!(c.waitq)
schedule(t, arg, error=error)
end
nothing
end
julia> function foo()
c=Condition()
for i in 1:10^6
notify(c; all=false)
end
end
foo (generic function with 1 method)
julia> foo()
julia> @time foo()
2.445 seconds (8000 k allocations: 381 MB, 2.73% gc time)
julia> const ct=Condition()
Condition(Any[])
julia> @code_typed notify(ct)
1-element Array{Any,1}:
:($(Expr(:lambda, Any[:c], Any[Any[Any[:c,Condition,0]],Any[],Any[Union{},Union{},Union{},Union{},Union{},Union{},Union{},Union{},Array{Any,1},Array{Any,1},Int64],Any[]], :(begin $(Exp
r(:line, 236, symbol("task.jl"), symbol("")))
GenSym(8) = (top(ccall))(:jl_alloc_array_1d,(top(apply_type))(Array,Any,1)::Type{Array{Any,1}},(top(svec))(Any,Int)::SimpleVector,Array{Any,1},0,0,0)::Array{Any,1}
GenSym(9) = GenSym(8)
return __notify#26__(GenSym(9),c::Condition)::Void
end::Void))))