Live data from Hacker News

Yes, You Have Been Writing SPSC Queues Wrong

vitorian.com

1–10 of 35 posts

Re: Yes, You Have Been Writing SPSC Queues Wrong

#2
Why is push() checking for overlap? I thought not caring about that was the point of a ring buffer?

[EDIT:] To clarify for those who didn't (couldn't?) read TFA's first sentence, it specifically invokes "I've been writing ring buffers wrong all these years" [0], recently featured on HN.

[0] https://www.snellman.net/blog/archive/2016-12-13-ring-buffer...

Re: Yes, You Have Been Writing SPSC Queues Wrong

#3

Why is push() checking for overlap? I thought not caring about that was the point of a ring buffer? [EDIT:] To clarify for those who didn't (couldn't?) read TFA's first sentence, it specifically invokes "I've been writing ring buffers wrong all these years" [0], recently featured on HN. [0] https://www.snellman.net/blog/archive/2016-12-13-ring-buffer...

I can't read the site because it's blocked for me, but isn't a ring-buffer a different class of data-structure than a queue? AIUI, queues are for non-lossy FIFO behavior.

Re: Yes, You Have Been Writing SPSC Queues Wrong

#4

Why is push() checking for overlap? I thought not caring about that was the point of a ring buffer? [EDIT:] To clarify for those who didn't (couldn't?) read TFA's first sentence, it specifically invokes "I've been writing ring buffers wrong all these years" [0], recently featured on HN. [0] https://www.snellman.net/blog/archive/2016-12-13-ring-buffer...

I can't read the site because it's blocked for me, but isn't a ring-buffer a different class of data-structure than a queue? AIUI, queues are for non-lossy FIFO behavior.

My $10/mo shared host is already spinning with ycomb+linkedin traffic. I shall upgrade...

Re: Yes, You Have Been Writing SPSC Queues Wrong

#5

Why is push() checking for overlap? I thought not caring about that was the point of a ring buffer? [EDIT:] To clarify for those who didn't (couldn't?) read TFA's first sentence, it specifically invokes "I've been writing ring buffers wrong all these years" [0], recently featured on HN. [0] https://www.snellman.net/blog/archive/2016-12-13-ring-buffer...

[deleted]

Re: Yes, You Have Been Writing SPSC Queues Wrong

#6

Why is push() checking for overlap? I thought not caring about that was the point of a ring buffer? [EDIT:] To clarify for those who didn't (couldn't?) read TFA's first sentence, it specifically invokes "I've been writing ring buffers wrong all these years" [0], recently featured on HN. [0] https://www.snellman.net/blog/archive/2016-12-13-ring-buffer...

Depends how you use it. For buffering realtime data if latency is of chief concern then by all means, discard the old stuff. If the desired behavior is to block when the queue is full, then you need to check for an overlap.

Re: Yes, You Have Been Writing SPSC Queues Wrong

#8

I'm curious what you think the problems are that unbounded indices causes? Unsigned overflow is well defined in C++, so I don't see the problem here. AFAIK, the only issue would be with requiring power of 2 sizes.

Yeah. Just requires power of 2 sizes and handling of write_idx < read_idx.

Re: Yes, You Have Been Writing SPSC Queues Wrong

#9

Why is push() checking for overlap? I thought not caring about that was the point of a ring buffer? [EDIT:] To clarify for those who didn't (couldn't?) read TFA's first sentence, it specifically invokes "I've been writing ring buffers wrong all these years" [0], recently featured on HN. [0] https://www.snellman.net/blog/archive/2016-12-13-ring-buffer...

I can't read the site because it's blocked for me, but isn't a ring-buffer a different class of data-structure than a queue? AIUI, queues are for non-lossy FIFO behavior.

No, ring buffers are just an implementation of a queue. You can implement lossy/lossless ring buffers or linked-list queues.

Re: Yes, You Have Been Writing SPSC Queues Wrong

#10

Why is push() checking for overlap? I thought not caring about that was the point of a ring buffer? [EDIT:] To clarify for those who didn't (couldn't?) read TFA's first sentence, it specifically invokes "I've been writing ring buffers wrong all these years" [0], recently featured on HN. [0] https://www.snellman.net/blog/archive/2016-12-13-ring-buffer...

Depends how you use it. For buffering realtime data if latency is of chief concern then by all means, discard the old stuff. If the desired behavior is to block when the queue is full, then you need to check for an overlap.

If you're overwriting old data you still need to check for overlap and advance the read index if you're overrunning old data.
Post reply on HN