You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Makes IntrusiveLinkedListSynchronized mutable to avoid allocation on poptask (JuliaLang#50802)
Currently `poptask` is allocating every time it calls into
`jl_task_get_next` due to `StickyWorkqueue`
(`IntrusiveLinkedListSynchronized`) being immutable and requiring an
allocation to be used as `Any` on the `ccall`.
The allocations can be seen in the following snippet:
```
function work()
done = 0.0
l = Threads.SpinLock()
Threads.@sync for _ in 1:(Threads.nthreads() / 2)
Threads.@Spawn begin
v = 1.0
for i in 1:(1<<33)
v *= 1.0001
if i % (1 << 13) == 0
yield()
end
end
Base.@lock_nofail l done += v
end
end
return done
end
julia> @time work()
15.758794 seconds (5.03 M allocations: 153.523 MiB, 0.35% gc time)
```
Which after the change becomes:
```
julia> @time work()
15.907513 seconds (67 allocations: 4.719 KiB)
```
0 commit comments