4 ms·
Yeah the .NET JITter is free to do what it wants with the field layout, mostly to pack/align things for better perf. BTW have you looked at Distuptor.NET[0], t
by matthewwarren 12y ago
Yeah the .NET JITter is free to do what it wants with the field layout, mostly to pack/align things for better perf.
BTW have you looked at Distuptor.NET[0], the .NET port of Disruptor? It's a high-speed ring buffer written in .NET, that might contain some tricks to get your perf closer to the Go version.
[0] https://github.com/disruptor-net/Disruptor-net https://github.com/disruptor-net/Disruptor-net
- danesparza 12y agoForgive me. What do you mean by "pack/align things for better perf"? Specifically, in what use cases would this yield better performance? And by what measurements?
- ygra 12y agoData need to be aligned to multiples of its size on most CPU architectures to access them without performance degradation (or at all, even). Reordering members for smaller object size mostly makes sense so that more of them can fit into cache.
- matthewwarren 12y agoIt's related to the CPU, there's a nice wiki article[0] that goes into it a bit more. Also in [0] it mentions that SSE instructions will only work with 128-bit aligned data, so sometimes it's a requirement. Alignment can make memory access more efficient, but means that data can take up more space. Packing is the opposite of this, rearranging fields, so that they take up the smallest space possible. So the 2 things are a trade-off. [0] http://en.wikipedia.org/wiki/Data_structure_alignment http://en.wikipedia.org/wiki/Data_structure_alignment