Weird to see this here! I've used CoralBlocks in the low-latency trading domain previously. Highly recommend. The API is kind, they're very responsive, and the latency is exceptional (and comes with all the basics like thread pinning built-in for convenience)
smarx007|1 year ago
papercrane|1 year ago
algo_trader|1 year ago
Yeah, modern JVM is a true miracle and you can be x5 productive (and safe!) compared to C/C++
Do you have any recommendations for a low latency work queue (with in a jvm)?
I want to spawn millions of micro-second-tasks per second, to worker cores..
I am on a massive cache CPU so memory latency hasnt raised its ugly head yet
EDIT: not LMAX please...
joas_coder|1 year ago
The DiamondQueue should be soon available for free at the CoralQueue project on GitHub.
pacoverdi|1 year ago
jffhn|1 year ago
I toyed around the ring buffer pattern a decade ago, creating a unicast one (using CAS on entries, and eventually a logarithmic scan for next readable entry, not to brute-force-scan them all), but I'm not sure that its latency is much better than that of a regular ThreadPoolExecutor (the throughput could be better though).
Latency also depends on whether it spins or blocks when waiting for a slot to read or write.
If you want to give it a try: https://github.com/jeffhain/jodk/blob/master/src/net/jodk/th...
joas_coder|1 year ago
bsder|1 year ago
kasey_junk|1 year ago
In most applications like this you'll see direct byte manipulation to byte buffers because you want to pull as much performance as possible.
There are fast serialization formats like SBE that people leverage for this as well.
joas_coder|1 year ago
Your transfer object needs to implement MemorySerializable. Below two examples from CoralRing's GitHub:
https://github.com/coralblocks/CoralRing/blob/main/src/main/...
https://github.com/coralblocks/CoralRing/blob/main/src/main/...
The second one effectively allows you to send anything you want (as bytes) through the ring, making CoralRing message agnostic.