Coder Social home page Coder Social logo

ringbuf's Introduction

ringbuf

Ring buffer implementation by GO

Concept

Ringbuf implements ring buffer base on channel so never blocks the writer.

It provider three types ring buffer:

  • Normal[ringbuf.New]: ring buffer with fixed size, and when its buffer is full then the oldest value in the buffer is discarded.
  • Infinity[ringbuf.NewInfinity]: ring buffer with infinity size, and the new value is always can be added.
  • Overflow[ringbuf.NewOverflow]: ring buffer with fixed size, and when its buffer is full then the new value is discarded.

Install

go get github.com/JamesYYang/ringbuf

Example

type Message struct {
	Name  string
	Value string
}

func SendMessage(input chan<- Message) {
	for i := 0; i < 50; i++ {
		msg := Message{
			Name:  fmt.Sprintf("Message %d", i),
			Value: fmt.Sprintf("Value %d", i),
		}
		input <- msg
		log.Printf("sending message: %s\n", msg.Name)
		time.Sleep(1 * time.Second)
	}

}

func ReceiveMessage(output <-chan Message) {
	for msg := range output {
		log.Printf("receiving message: %s\n", msg.Name)
		time.Sleep(5 * time.Second)
	}
}

func main() {

	rb := ringbuf.New[Message](10)

	go SendMessage(rb.In())
	go ReceiveMessage(rb.Out())

	c := make(chan os.Signal)
	signal.Notify(c, os.Interrupt, os.Kill)
	<-c
	log.Fatal("program interrupted")
}

ringbuf's People

Contributors

jamesyyang avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar

Forkers

gozelle

ringbuf's Issues

关于项目测试的bug

您好,关于项目中example测试文件的bug,可以执行一下,有些数据会被忽略,是不是ringbuffer 有点问题,如下书出是我执行的结果 [94877]: 2023/06/16 20:47:49.822561 sending message: Message 0
[94877]: 2023/06/16 20:47:49.822594 receiving message: Message 0
[94877]: 2023/06/16 20:47:50.823712 sending message: Message 1
[94877]: 2023/06/16 20:47:51.824961 sending message: Message 2
[94877]: 2023/06/16 20:47:52.826109 sending message: Message 3
[94877]: 2023/06/16 20:47:53.827196 sending message: Message 4
[94877]: 2023/06/16 20:47:54.823696 receiving message: Message 1
[94877]: 2023/06/16 20:47:54.827670 sending message: Message 5
[94877]: 2023/06/16 20:47:55.828709 sending message: Message 6
[94877]: 2023/06/16 20:47:56.829780 sending message: Message 7
[94877]: 2023/06/16 20:47:57.830831 sending message: Message 8
[94877]: 2023/06/16 20:47:58.831869 sending message: Message 9
[94877]: 2023/06/16 20:47:59.824752 receiving message: Message 2
[94877]: 2023/06/16 20:47:59.832200 sending message: Message 10
[94877]: 2023/06/16 20:48:00.833260 sending message: Message 11
[94877]: 2023/06/16 20:48:01.834317 sending message: Message 12
[94877]: 2023/06/16 20:48:02.835396 sending message: Message 13
[94877]: 2023/06/16 20:48:03.836482 sending message: Message 14
[94877]: 2023/06/16 20:48:04.825793 receiving message: Message 3
[94877]: 2023/06/16 20:48:04.837523 sending message: Message 15
[94877]: 2023/06/16 20:48:05.838554 sending message: Message 16
[94877]: 2023/06/16 20:48:06.839589 sending message: Message 17
[94877]: 2023/06/16 20:48:07.840628 sending message: Message 18
[94877]: 2023/06/16 20:48:08.841699 sending message: Message 19
[94877]: 2023/06/16 20:48:09.826851 receiving message: Message 5
[94877]: 2023/06/16 20:48:09.842731 sending message: Message 20
[94877]: 2023/06/16 20:48:10.843788 sending message: Message 21
[94877]: 2023/06/16 20:48:11.844828 sending message: Message 22
[94877]: 2023/06/16 20:48:12.844941 sending message: Message 23
[94877]: 2023/06/16 20:48:13.845385 sending message: Message 24
[94877]: 2023/06/16 20:48:14.827893 receiving message: Message 10
[94877]: 2023/06/16 20:48:14.846448 sending message: Message 25
[94877]: 2023/06/16 20:48:15.847488 sending message: Message 26
[94877]: 2023/06/16 20:48:16.848550 sending message: Message 27
[94877]: 2023/06/16 20:48:17.849616 sending message: Message 28
[94877]: 2023/06/16 20:48:18.849704 sending message: Message 29
[94877]: 2023/06/16 20:48:19.828961 receiving message: Message 15
[94877]: 2023/06/16 20:48:19.850751 sending message: Message 30
[94877]: 2023/06/16 20:48:20.851783 sending message: Message 31
[94877]: 2023/06/16 20:48:21.852818 sending message: Message 32
[94877]: 2023/06/16 20:48:22.853858 sending message: Message 33
[94877]: 2023/06/16 20:48:23.854934 sending message: Message 34
[94877]: 2023/06/16 20:48:24.829092 receiving message: Message 20
[94877]: 2023/06/16 20:48:24.855980 sending message: Message 35
[94877]: 2023/06/16 20:48:25.857028 sending message: Message 36
[94877]: 2023/06/16 20:48:26.858096 sending message: Message 37
[94877]: 2023/06/16 20:48:27.859162 sending message: Message 38
[94877]: 2023/06/16 20:48:28.860198 sending message: Message 39
[94877]: 2023/06/16 20:48:29.830127 receiving message: Message 25
[94877]: 2023/06/16 20:48:29.861241 sending message: Message 40
[94877]: 2023/06/16 20:48:30.862312 sending message: Message 41
[94877]: 2023/06/16 20:48:31.863357 sending message: Message 42
[94877]: 2023/06/16 20:48:32.863702 sending message: Message 43
[94877]: 2023/06/16 20:48:33.864745 sending message: Message 44
[94877]: 2023/06/16 20:48:34.831186 receiving message: Message 30
[94877]: 2023/06/16 20:48:34.865580 sending message: Message 45
[94877]: 2023/06/16 20:48:35.866564 sending message: Message 46
[94877]: 2023/06/16 20:48:36.867145 sending message: Message 47
[94877]: 2023/06/16 20:48:37.868237 sending message: Message 48
[94877]: 2023/06/16 20:48:38.869328 sending message: Message 49
[94877]: 2023/06/16 20:48:39.832219 receiving message: Message 35
[94877]: 2023/06/16 20:48:44.833279 receiving message: Message 40
[94877]: 2023/06/16 20:48:49.834358 receiving message: Message 41
[94877]: 2023/06/16 20:48:54.835420 receiving message: Message 42

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.