After a brief skim, it looks like this implementation is highly optimized for throughput and broadcasts whereas a channel has many other usecases.
Consumers subscribing to the same event type are placed in a group. There is a single lock for the whole group. When publishing, the lock is taken once and the event is replicated to each consumer's queue. Consumers take the lock and swap their entire queue buffer, which lets them consume up to 128 events per lock/unlock.
Since channels each have a lock and only take 1 element at a time, they would require a lot more locking and unlocking.
There is also some frequent polling to maintain group metadata, so this could be less ideal in low volume workloads where you want CPU to go to 0%.