6 ms·
Not a language difference, but a design difference. By calling availableToPoll before polling you can poll a batch of messages without blocking or locking on ea
by joas_coder 2y ago
Not a language difference, but a design difference. By calling availableToPoll before polling you can poll a batch of messages without blocking or locking on each message. This design decision allows the ring to perform batching naturally. And batching is very important for perfomance. java.util.concurrent.ConcurrentLinkedQueue does not support batching.
- knome 2y agoI don't think anyone is questioning the strategy, just the naming. Polling, as a term, already generally means asking if there is anything ready. The library might instead have had a poll() to indicate readiness and an unsafeTakeReadyBatch()/releaseBatch() or similar to handle the low level receipt primitives. Or you could even have had a checkForReady() and left poll() to implement a generic version of your busy waiting example, polling with a given sleep and timeout until items were ready, as a convenience for the user. It's fine as is, of course, as you document expected usage quite well.
- joas_coder 2y agoOh, I see now. I thought he was talking about a computer language but he was actually talking about the English language. My bad. So are you saying that POLL was a bad choice of name because polling means "check if there is something available and if there is get it"? What would be a better name? How about availableToFetch and fetch? Any other better idea? I don't like remove because you are not actually removing the object from the ring.
- gpderetta 2y agopoll doesn't necessarily imply removing.
- joas_coder 2y agoIt is clear to me now that poll only removes if there is something to remove A much better name would have been FETCH and not POLL We'll be changing everything from poll to fetch in the next version => availableToFetch() and fetch()
- gpderetta 2y agoWhile we are bikeshedding, what about peek() (returns the element, but doesn't dequeue), pop() (dequeue and return the element), try_peek(), try_pop() for the polling variants.
- joas_coder 2y agoThis change is now released. Thanks knome and gpderetta for your suggestions and clarifications. availableToPoll() is now availableToFetch() poll() is now fetch() peek() is now fetch(false) Note that fetch() == fetch(true)