Commit bc01fa8
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)
```1 parent 4ac6c5b commit bc01fa8
1 file changed
+1
-1
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
688 | 688 | | |
689 | 689 | | |
690 | 690 | | |
691 | | - | |
| 691 | + | |
692 | 692 | | |
693 | 693 | | |
694 | 694 | | |
| |||
0 commit comments