2019-04-11 14:21:27 +00:00
|
|
|
# gtq - the go task queue
|
|
|
|
|
|
|
|
## what?
|
|
|
|
a simple goroutine scheduler for longer-running goroutines, allowing you
|
|
|
|
to put them into priority buckets, and get roughly fair queuing of which
|
|
|
|
tasks will be processed next.
|
|
|
|
|
|
|
|
## why?
|
|
|
|
goroutines are awesome, and typically super fast. but what if you need to
|
|
|
|
queue up a lot of longer running work in the background? and what if you
|
|
|
|
want some control over which chunks of work will get executed next?
|
|
|
|
|
|
|
|
gtq provides simple task queuing and scheduling for longer running goroutines.
|
|
|
|
in this case, "long" means on the order of 1ms or longer, as many simple
|
|
|
|
goroutines can run in a matter of ns.
|
|
|
|
|
|
|
|
## how?
|
|
|
|
We use simple heap based queues for each priority level, and track statistics
|
|
|
|
in a rolling window for task execution times in each of those. Then we
|
|
|
|
have a scheduler which looks at those statistics, in relation to the priority
|
|
|
|
level for the queue, and decides which queue to pull from next and feed to task
|
|
|
|
runners.
|
|
|
|
|
|
|
|
Overhead for this process is typically < 1000ns, so it's not suitable for
|
|
|
|
typical short lived goroutines, but those type of goroutines don't really,
|
|
|
|
need scheduling anyway.
|
|
|
|
|
|
|
|
## usage
|
|
|
|
TODO
|
2019-04-24 21:38:08 +00:00
|
|
|
|
|
|
|
## legalese
|
|
|
|
© 2019 - Tessa Nordgren
|
|
|
|
|
|
|
|
Licensed under the GNU Lesser General Public License, version 3.0. You should
|
|
|
|
have received a copy of this license with this source code. If not, you can
|
|
|
|
find it at at the [LGPL 3.0 homepage](https://www.gnu.org/licenses/lgpl-3.0.en.html).
|