netty(或java NIO)通道是FIFO吗?

问题描述 投票:0回答:2

netty通道(或一般的Java NIO通道)是FIFO吗?或者我需要自己使用序列号来实现FIFO?

谢谢

java netty nio fifo
2个回答
1
投票

NIO在内部维护读写锁定;但是它们是在NIO中使用synchronized块实现的。

使用synchronized时,无法保证线程B在线程A之后获得锁定。线程C完全有可能在线程B之前获得写锁定。

请参阅以下锁定版本:Synchronized release order

如果你需要在多个线程中保证FIFO,那么你需要使用ReentrantLock创建一个fair=true并要求所有线程首先获得该锁。


0
投票

维护顺序不是传输层的责任。因此,您通过相同的通道(相同的套接字)发送消息A和消息B,在服务器端,消息到达顺序是不确定的。

符合这些条件的消息到达订单是发送订单:

  • 使用TCP协议
  • 消息A和消息B在一个系统调用中发送

如果您需要订购,您的应用程序应该这样做。

© www.soinside.com 2019 - 2024. All rights reserved.