为什么RingBuffer的getBufferSize()是int,remainingCapacity()是long?
Why is RingBuffer's getBufferSize() an int but remainingCapacity() is a long?
我正在编写一些单元测试代码,需要知道发布到干扰器环形缓冲区的所有事件都已处理(如前所述,它仅针对特定测试用例)。
经过几个小时的研究并没有找到任何优雅解决方案后,我决定在测试用例中使用以下代码:
while (ringBuffer.getBufferSize() > ringBuffer.remainingCapacity()) {
Thread.yield();
}
它似乎有效,但由于 getBufferSize()
returns 一个 int
和 remainingCapacity()
returns 一个 long
我担心我忽略了一些东西。
有谁知道为什么 getBufferSize()
returns 一个 int
和 remainingCapacity()
returns 一个 long
?这对我来说没有意义,除非它是一个错误。
注意:我不知道为什么作者不转换为 int。但是,我可以告诉你为什么需要 long
或需要沮丧:
ringBuffer.remainingCapacity
是一个long
,因为它是在bufferSize
的基础上减去produced
加consumed
计算出来的,如这里所见MultiProducerSequencer
:
/**
* @see Sequencer#remainingCapacity()
*/
@Override
public long remainingCapacity()
{
long consumed = Util.getMinimumSequence(gatingSequences, cursor.get());
long produced = cursor.get();
return getBufferSize() - (produced - consumed);
}
getBufferSize
是 一个 int
。由于 consumed
和 produced
都是 一个 long
(并且需要是),因此得出的数学结果也将是一个 long
。
这只是我有根据的猜测,但我假设它们不会出于性能原因向下转换回 int,returning a 没有实际危害long
,但 return 您拥有的类型只是稍微快一点,而不是强制转换可能不需要的用户。
我正在编写一些单元测试代码,需要知道发布到干扰器环形缓冲区的所有事件都已处理(如前所述,它仅针对特定测试用例)。
经过几个小时的研究并没有找到任何优雅解决方案后,我决定在测试用例中使用以下代码:
while (ringBuffer.getBufferSize() > ringBuffer.remainingCapacity()) {
Thread.yield();
}
它似乎有效,但由于 getBufferSize()
returns 一个 int
和 remainingCapacity()
returns 一个 long
我担心我忽略了一些东西。
有谁知道为什么 getBufferSize()
returns 一个 int
和 remainingCapacity()
returns 一个 long
?这对我来说没有意义,除非它是一个错误。
注意:我不知道为什么作者不转换为 int。但是,我可以告诉你为什么需要 long
或需要沮丧:
ringBuffer.remainingCapacity
是一个long
,因为它是在bufferSize
的基础上减去produced
加consumed
计算出来的,如这里所见MultiProducerSequencer
:
/**
* @see Sequencer#remainingCapacity()
*/
@Override
public long remainingCapacity()
{
long consumed = Util.getMinimumSequence(gatingSequences, cursor.get());
long produced = cursor.get();
return getBufferSize() - (produced - consumed);
}
getBufferSize
是 一个 int
。由于 consumed
和 produced
都是 一个 long
(并且需要是),因此得出的数学结果也将是一个 long
。
这只是我有根据的猜测,但我假设它们不会出于性能原因向下转换回 int,returning a 没有实际危害long
,但 return 您拥有的类型只是稍微快一点,而不是强制转换可能不需要的用户。