假设我们有一个如下图所示的图形:
broadcast ~> flowA ~> fanIn
source ~> broadcast ~> flowB ~> fanIn ~> sink
broadcast ~> flowC ~> fanIn
流flowA
,flowB
,flowC
都对传入元素进行转换。 fanIn
对所有三个流的结果执行一些合并操作。
挑战在于,A
/ B
/ C
流不会以相同的速率发射元素。对于源中的某些元素,flowA
没有要发射的东西,而flowB
和C
则继续发射。
现在,在fanIn
,我想确保所有三个端口上的接收元素都“属于”从源发出的同一元素,即它们是同一元素转换的结果。 / p>
人们会怎么做呢?
我当前的解决方案是让流A
/ B
/ C
发出Option
s。如果每个流都可以执行转换,则发出Some
;如果不能执行,则发出None
。这样,所有三个流的发射元素的数量和速率保持不变,并且我可以保证接收到的元素属于同一源元素。我正在寻找性能更好的解决方案,如果可能的话,不需要不必要的对象创建和包装。
答案 0 :(得分:2)
返回无,将不会真正创建新对象…… 换成Some(而不是将执行nullcheck的Option)也可以提高性能。 我认为没有null元素就无法真正绕过,但是如果您的返回类型中包含nonValid / null,也可以用作None。 (例如,如果它们是具有长id的对象,则可以使用id = -1元素创建一个无效元素并将其过滤掉。) 我认为这里不会有银弹。
但是:我认为这不是问题,您不会失去明显的性能,您的代码可能还会有其他更大的瓶颈,所以放手:D
(从lightbend discuss转发了我的答案)