72) [-pipeline---------------------------------------------------------------------------------------------] ! [-bin-----------------------------] [-thread---------] ! ! ! [--------] [---------] ! [------] [---------] [------] ! [--------] ! ! ! ! !faksesrc! !identity1! ! !queue1! !identity2! !queue2! ! !fakesink! ! ! ! ! ! src --- sink * src --- sink n src -- sink src -- sink src -- sink ! ! ! ! ! [--------] [---------] ! [------] [---------] [------] ! [--------] ! ! ! [---------------------------------] [----------------] ! [------------------------------------------------------------------------------------------------------] ----- Ideally, you'd end up with the following sub-pipelines pipeline: fakesrc -> identity1 -> queue1 queue1 -> identity2 -> queue2 thread: queue2 -> fakesink They'd be scheduled as following: fakesrc: passive chained, pulled by identity1 identity1: loopfunc cothreaded, ENTRY queue1:sink: passive chained, pushed by identity1 queue1:src: _get-based iteration, ENTRY identity2: chained by queue1 queue2:src: passively chained, pushed by identity2 queue2:sink: passively chained, pulled by fakesink fakesink: loopfunc cothreaded, ENTRY ----- Most likely, we'd end up with the following