Giter Club home page Giter Club logo

ttl's Introduction

TTL

Generic concurency safe Time-To-Live list.

func ExampleTTL() {

	list := ttl.New[int](
		func(key int) {
			fmt.Printf("timed out: %v\n", key)
		},
	)
	list.Put(42, 1*time.Millisecond)

	<-list.Wait() // optionally wait for everything to time out.
	list.Stop()   // stops the internal worker.

	// Output:
	// timed out: 42
}

Uses channels for internals sync, operations are not time compensated. Timeout events are always a few microseconds late.

It stores keys in a slice sorted by key timeout in ascending order and continually resets a ticker that runs in a worker routine to a timeout of the next key in queue.

Has room for optimizations. Adding items whose timeout is always greater than the last in the list is fast but is slow if timeouts being added continually decrease, i.e. are put to the front of the key list.

goos: linux
goarch: amd64
pkg: github.com/vedranvuk/ttl
cpu: 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz
BenchmarkPutAscending
BenchmarkPutAscending-8           732739              1643 ns/op
BenchmarkPutDescending
BenchmarkPutDescending-8           40346            182233 ns/op
BenchmarkPutRandom
BenchmarkPutRandom-8               63727            146609 ns/op
PASS
ok      github.com/vedranvuk/ttl        20.472s

License

MIT

ttl's People

Contributors

vedranvuk avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.