From 487c8fe88f4cfcc55850b8aef73665b1d09b8fe0 Mon Sep 17 00:00:00 2001 From: Junegunn Choi Date: Wed, 16 Aug 2017 03:24:23 +0900 Subject: Make Reader event notification asynchronous Instead of notifying the event coordinator (EventBox) whenever a new line is arrived, start a background goroutine that periodically does the task. Atomic.StoreInt32 is much cheaper than mutex synchronization that happens during EventBox update. --- src/core.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'src/core.go') diff --git a/src/core.go b/src/core.go index 968d407b..61f14f91 100644 --- a/src/core.go +++ b/src/core.go @@ -115,9 +115,9 @@ func Run(opts *Options, revision string) { // Reader streamingFilter := opts.Filter != nil && !sort && !opts.Tac && !opts.Sync if !streamingFilter { - reader := Reader{func(data []byte) bool { + reader := NewReader(func(data []byte) bool { return chunkList.Push(data) - }, eventBox, opts.ReadZero} + }, eventBox, opts.ReadZero) go reader.ReadSource() } @@ -150,7 +150,7 @@ func Run(opts *Options, revision string) { found := false if streamingFilter { slab := util.MakeSlab(slab16Size, slab32Size) - reader := Reader{ + reader := NewReader( func(runes []byte) bool { item := Item{} if chunkList.trans(&item, runes, 0) { @@ -160,7 +160,7 @@ func Run(opts *Options, revision string) { } } return false - }, eventBox, opts.ReadZero} + }, eventBox, opts.ReadZero) reader.ReadSource() } else { eventBox.Unwatch(EvtReadNew) -- cgit v1.2.3