I just watched the JuliaCon scheduler talk https://youtu.be/FC4HyJXyvP0?si=LcMYJLlIKAqnvqQG&t=341 and it was mentioned that the sticky bit can spread to other tasks when using locks.
With Julia 1.12 I tried to have a non sticky task acquire a ReentrantLock held by a sticky task and the other way around as well. In neither instance did the non sticky task suddenly become sticky. This is also something I test for in gRPCClient.jl and have not seen it either.
I’m trying to understand this because for high performance network IO applications @async has ideal performance characteristics. Is there a comprehensive list of conditions for a task to become sticky somewhere? I know that if a parent task uses @async, it becomes sticky also. But outside of that what do I need to watch out for? Is there any special behavior inside of C callbacks or interactions with threads created outside of Julia?