My ruby version is 1.9, running under Linux-2.6.31 kernel.
For the code above, though we know the @count isn’t safe for sharing.
But the result is always correct.
So can we say ruby-1.9 behaves better on threads than 1.8?
My ruby version is 1.9, running under Linux-2.6.31 kernel.
For the code above, though we know the @count isn’t safe for sharing.
But the result is always correct.
So can we say ruby-1.9 behaves better on threads than 1.8?
My suspicion is it has to do with the way threads work in 1.9. Read urby by ub: Inside Ruby 1.9 interpreter: Threading in Ruby 1.9.1.
I suspect that the GVL is not released while executing the += operator,
making a real context switch impossible, therefore preventing the other
thread from even running while the assignment is taking place.
Of course you should NOT be counting on the GVL to synchronize your
code.
end
20000
So can we say ruby-1.9 behaves better on threads than 1.8?
The test proves nothing other than that you got what seems like a proper
sum in the end. The runtime could have made accesses to @count atomic -
or you could have been lucky (more likely).
It’s actually the other way round: if the result would have been !=
20000 Ruby 1.9 could be said to behave better on threads than 1.8. The
reason is that this would tell you that there are actually concurrent
accesses to the same memory, which means there would be more concurrency
in 1.9 than in 1.8 with its green threads.
A system which guards accesses to shared resources without explicit
synchronization would be very bad because it would sacrifice performance
without reason.
Kind regards
robert
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.