The key difference between a StreamBuffer and a Queue/Semaphore/Mutex is that the StreamBuffer is only allowed to have a SINGLE write and a SINGLE reader (at a given time), so only one task can be blocked on it. This simplifies the logic such that it was possible to add a hook to allow cross-core/cross-kernel (AMP) notifications to StreamBuffers which would be very hard to add to Queues, since it would need to deal with having to figure out which kernel a give task on the waiting list belongs to.