Quote from hftvol:
At a high level, shared memory mapping isn't really any different from TCP or Unix domain sockets???
Excuse me? The two could not be more different. What are you talking about?
By the way, in case you did not get my point: IPC messaging is utterly useless when being used on the same machine. Then memory mapping is preferable. IPC really makes sense when you send data between different machines over the network sockets.
Not sure what was so confusing in my previous post.
And I stand by my 16m/second performance numbers using ZeroMQ .Net libraries and C# on .Net 4.0. The performance is based on sending messages IPC over tcp albeit on the same machine (which can immediately be changed by registering the ZMQ sockets on different ports and hostname. By the way this performance includes the serialization and deserialization of 16byte messages.
Okay, I got confused. Obviously shared memory doesn't work between different computers because it's impossible. I meant that when they are on the same machine they are not that different; eventually there is going to be some shared memory somewhere whether it's in the kernel or in userland. In the Linux kernel they use these sk_buff things which are the shared memory.
Also I'm interested in the code backing this benchmark of yours; do you want to share the code here or send via PM? I just can't believe you're not sacrificing latency for throughput; on my machine going through the networking stack is about 10 microseconds as measured by half of round trip ping time.