我想要连续地在网络上传输数据。源提供了一个字节数组,我希望将其存储在数据结构中,作为缓冲,以弥补任何网络延迟。
以队列方式存储字节的最有效的数据结构是什么。把它想象成一个管道,其中一个线程在数据中泵出,另一个线程通过网络读取和发送它,而管道本身足够长,足以包含多个输入数据帧。
排队是否足够有效?
发布于 2015-11-13 16:40:07
如果将队列一次放入一个byte中,那么byte将是无效的。它会消耗大量的内存,造成GC压力,并减慢速度。
如果在队列或ByteBuffers中放置了适当大小(例如64 if )的byte[]s或ByteBuffers,则可以使它们的开销合理。该缓冲区大小可以根据性能实验进行调整和更改,甚至可以在运行时进行适应性调整。
TCP已经补偿了网络延迟。如果您正在使用UDP,那么您将需要正确地处理拥塞,否则事情会变得很糟糕。在实践中,使用TCP或UDP直接创造了许多额外的工作和车轮的重新发明。
ZeroMQ (或纯Java JeroMQ)是一个很好的库选项,它有一个高效的有线协议(对于实时股票交易平台来说足够好)。它以透明的方式处理排队问题,并为不同的客户端模型提供了许多选项,其中包括在广播中有大量客户端的PUB SUB之类的功能。在流程中,ZeroMQ可以管理作为生产者和使用者的数据的排队。您甚至可以使用它有效地将相同的字节广播给具有相同流的独立工作人员(例如:一个执行使用计量,另一个执行转码)。
还有其他的库也可以工作。例如,我认为奈蒂能够有效地处理这样的事情。
发布于 2015-11-13 16:42:44
你应该去看看OKIO图书馆
https://stackoverflow.com/questions/33697392
复制相似问题