Unbuffered channel with semaphore queues. Best unbuffered performance observed yet.

The semaphore queues allow the threads to pass data directly to each other, so there is no need to build unbuffered behaviour around a buffer -- that presumably results in the worst of all worlds.