I’m starting to get the feeling that the recommendation to look at the code is a good one. It appears that Channel uses a Vector for the buffer https://github.com/JuliaLang/julia/blob/master/base/channels.jl#L39 . It’s not going to handle multithreading efficiently.
I stumbled across this announcement: ConcurrentCollections.jl: "lock-free" dictionary, queue, etc. for Julia 1.7 so I’ll take a look at those and see if they are more appropriate.