Eric,
the non-deterministical interleave is implemented in scalaz-stream via Process.wye, and in fact either is one of the non-deterministical combinators using wye. The reason you see them interleave left/right is because it tries to be fair and because you blocking the thread. Try to create one side that is slower than the second one and you will see the either is Non-deterministical.
Note in order to achieve non-determinsitical behaviour you need actually processes that are run from Two threads, your p1 process is actually blocking the single thread and as such in your scenario the order is always deterministical
try:
val p1 = Process(1,2,3).toSource
val p2 = Process(10) fby Process.sleep(1 second) fby Process(20,30).toSource
(p1 either p2).runLog.run.foreach(println)
That should emit
-\/(1)
\/-(10)
-\/(2)
-\/(3)
\/-(20)
\/-(30)