event: add new Subscription type and related utilities
This commit introduces a new Subscription type, which is synonymous with ethereum.Subscription. It also adds a couple of utilities that make working with Subscriptions easier. The mot complex utility is Feed, a synchronisation device that implements broadcast subscriptions. Feed is slightly faster than TypeMux and will replace uses of TypeMux across the go-ethereum codebase in the future.
This commit is contained in:
@ -149,16 +149,34 @@ func emptySubscriber(mux *TypeMux, types ...interface{}) {
|
||||
}()
|
||||
}
|
||||
|
||||
func BenchmarkPost3(b *testing.B) {
|
||||
var mux = new(TypeMux)
|
||||
defer mux.Stop()
|
||||
emptySubscriber(mux, testEvent(0))
|
||||
emptySubscriber(mux, testEvent(0))
|
||||
emptySubscriber(mux, testEvent(0))
|
||||
func BenchmarkPost1000(b *testing.B) {
|
||||
var (
|
||||
mux = new(TypeMux)
|
||||
subscribed, done sync.WaitGroup
|
||||
nsubs = 1000
|
||||
)
|
||||
subscribed.Add(nsubs)
|
||||
done.Add(nsubs)
|
||||
for i := 0; i < nsubs; i++ {
|
||||
go func() {
|
||||
s := mux.Subscribe(testEvent(0))
|
||||
subscribed.Done()
|
||||
for range s.Chan() {
|
||||
}
|
||||
done.Done()
|
||||
}()
|
||||
}
|
||||
subscribed.Wait()
|
||||
|
||||
// The actual benchmark.
|
||||
b.ResetTimer()
|
||||
for i := 0; i < b.N; i++ {
|
||||
mux.Post(testEvent(0))
|
||||
}
|
||||
|
||||
b.StopTimer()
|
||||
mux.Stop()
|
||||
done.Wait()
|
||||
}
|
||||
|
||||
func BenchmarkPostConcurrent(b *testing.B) {
|
||||
|
Reference in New Issue
Block a user