Opensource Update: Multitick

Posted by Natasha Richter on Sep 30, 2014 10:31:00 AM


Multitick is an open source project which helps us coordinate worker goroutines. It broadcasts a time.Ticker to multiple receivers, all of which receive the same values, aligned to an offset. This makes the workers more testable by avoiding nondeterministic use of time.Tick() inside them.

The package is a wrapper around a single time.Ticker in the Go language, which provides a way for many listeners to subscribe to a single set of ticks. If a subscriber is busy and can’t receive a tick, it will be discarded; the implementation is non-blocking. Additionally, ticks can be aligned to a specific boundary easily, which eliminates annoying code from your programs.

Install multitick in the usual way:

go get

And import it:

import (

To use multitick, create a ticker with the desired interval and offset. For example, to create a once-per-second ticker that will send at 750 milliseconds past the clock tick,

tick := multitick.NewTicker(time.Second, time.Millisecond*750)

If you want the ticker to start immediately instead of waiting, you can pass a negative number as the second parameter. Now subscribe to ticks. Here’s an example of starting worker routines with ticker channels:

go someFunc(tick.Subscribe())
go otherFunc(tick.Subscribe())

Subscribe returns a channel to which ticks will be delivered. Ticks that can’t be delivered to the channel are discarded.

Try it out and let us know what you think. Pull requests are welcome!

Pic Cred

Recent Posts

Posts by Topic

see all