There is this: https://godoc.org/bitbucket.org/ausocean/utils/ring

It has been used in production fairly extensively.

On Thu, 2019-11-21 at 19:47 -0800, Marcin Romaszewicz wrote:
> Hi All,
> 
> Before I reinvent the wheel, and because this wheel is particularly
> tricky
> to get right, I was wondering if anyone was aware of a a library
> providing
> something like this
> 
> - conforms to io.Reader
> - conforms to io.Writer
> - Contains a buffer of fixed size, say, 64MB. If you try to write
> when the
> buffer is too full, write blocks. When you try to read from an empty
> one,
> read blocks.
> 
> This describes the behavior of make(chan byte, 64 * MB), however, it
> doesn't seem to be efficient to do this with a channel. Say I'm
> transferring a few hundred GB via this mechanism. A chan of byte
> would need
> a few hundred billion byte writes, and a few hundred billion reads.
> Doesn't
> sound like it could be efficient at all. You can't implement this
> with a
> channel of []byte, because you'd violate your buffering limit if you
> pass
> too large of a byte array, so you'd have to chop things up into
> blocks, but
> maybe that's simpler than a full fledged blocking ring buffer.
> 
> Anyhow, I've implemented such things in various OS level plumbing, so
> I
> know I can do it in Go much more easily, just hoping to avoid it :)
> 
> Thanks for any advice,
> -- Marcin
> 

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/152a954eaa3eea02514e71bb142904480241ad6c.camel%40kortschak.io.

Reply via email to