Enhancement
The tryPop and tryPush function in MPMCQueue are not non-blocking functions.
If the queue is empty(for tryPop) or full(fro tryPush) for a long time, they all wait for a timeout and then return false.
I think it's better to change these tryXXX function names to XXXTimeout and add non-blocking tryXXX functions implementation.