刚刚在我的Corei5 2.8GHz上测试了Java的延迟,只发送/接收单字节,2个Java进程刚刚生成,没有为任务集分配特定的CPU核心:
TCP - 25 microseconds
Named pipes - 15 microseconds
现在显式指定核心掩码,如taskset 1 java Srv或taskset 2 java Cli:
TCP, same cores: 30 microseconds
TCP, explicit different cores: 22 microseconds
Named pipes, same core: 4-5 microseconds !!!!
Named pipes, taskset different cores: 7-8 microseconds !!!!
所以
TCP overhead is visible
scheduling overhead (or core caches?) is also the culprit
同时Thread.sleep(0)(作为strace显示导致执行单个sched_yield()Linux内核调用)需要0.3微秒 - 因此命名为单核的命名管道仍然有很多开销
一些共享内存测量: 2009年9月14日 - Solace Systems今天宣布其统一消息平台API使用共享内存传输可以实现小于700纳秒的平均延迟。 [http://solacesystems.com/news/fastest-ipc-messaging/]
附: - 第二天尝试以内存映射文件的形式共享内存,如果忙碌等待是可以接受的,我们可以将延迟减少到0.3微秒使用如下代码传递单个字节:
MappedByteBuffer mem =