Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中将100_000 RPM多路复用到有限数量的套接字上_Java_Linux_Sockets_Io - Fatal编程技术网

在Java中将100_000 RPM多路复用到有限数量的套接字上

在Java中将100_000 RPM多路复用到有限数量的套接字上,java,linux,sockets,io,Java,Linux,Sockets,Io,我需要从一台机器向另外两台机器发送大量请求(每台机器10万RPM)。我认为为每个请求打开一个套接字是浪费的(即使我重用了它们),相反,我认为我可以使用有限数量的套接字,并将请求“多路复用”到它们上。对我来说,实现它(在客户端)是最简单的,因为每台服务器有1个阻塞套接字+2个线程+一个工作池:1个写入线程在循环中连续发送请求,1个读卡器连续读取套接字并将任务发布到工作池,以匹配对请求的响应+处理它 问题:具有>1个套接字或>1个读写器线程,或具有处于非阻塞模式的套接字会增加吞吐量吗?这种设计还有其

我需要从一台机器向另外两台机器发送大量请求(每台机器10万RPM)。我认为为每个请求打开一个套接字是浪费的(即使我重用了它们),相反,我认为我可以使用有限数量的套接字,并将请求“多路复用”到它们上。对我来说,实现它(在客户端)是最简单的,因为每台服务器有1个阻塞套接字+2个线程+一个工作池:1个写入线程在循环中连续发送请求,1个读卡器连续读取套接字并将任务发布到工作池,以匹配对请求的响应+处理它

问题:具有>1个套接字或>1个读写器线程,或具有处于非阻塞模式的套接字会增加吞吐量吗?这种设计还有其他缺陷吗


详细信息:客户端使用Java(有一个自定义的JNI套接字实现,将大多数调用转换为linux特定的调用),所有机器都在linux上运行,服务器处理请求的时间不超过1毫秒,往返时间大部分为1-10毫秒,平均为2毫秒,但会出现罕见的延迟峰值,在此期间RTT可能会变为100毫秒或更高,链路为1Gbps,请求和响应各为10到20字节,协议是通过TCP实现的简单二进制协议;我很乐意提供任何其他必要的细节。

我开始认为这与上传一个大文件是一样的,在这种情况下,所描述的设计似乎很好……问题是,所有数据仍然必须按顺序排列在每个插座的电线上。您拥有的独立套接字越多,就越独立于正在进行的其他请求。因此,你应该使用尽可能多的插座。非阻塞模式不会加快速度,但会使正确编程困难十倍。@EJP感谢您的回答!通过使用非阻塞套接字,我的意思是(但没有说过)如果我使用了许多套接字(10到100个),那么拥有两倍多的线程本身可能会成为一个问题,然后我将不得不使用非阻塞。为了简洁起见,我省略了这一点,但事实上,每个客户端事件我必须向2发送请求,但每次这2个都会不同,从10到20的总池中选择,因此我必须将线程数乘以池大小。我开始认为这与上载大文件相同,在这种情况下,所描述的设计似乎很好……问题在于,所有数据仍然必须按顺序排列到每个插座的导线上。您拥有的独立套接字越多,就越独立于正在进行的其他请求。因此,你应该使用尽可能多的插座。非阻塞模式不会加快速度,但会使正确编程困难十倍。@EJP感谢您的回答!通过使用非阻塞套接字,我的意思是(但没有说过)如果我使用了许多套接字(10到100个),那么拥有两倍多的线程本身可能会成为一个问题,然后我将不得不使用非阻塞。为了简洁起见,我省略了这一点,但事实上,每个客户端事件我必须向2发送请求,但每次这2个请求都不同,从10到20的总池中进行选择,因此我必须将线程数乘以池大小。