Пример #1
0
        public void Setup(BenchmarkContext context)
        {
            _system = ActorSystem.Create("Test");
            var settings =
                ActorMaterializerSettings.Create(_system)
                .WithFuzzingMode(false)
                .WithSyncProcessingLimit(int.MaxValue)
                .WithAutoFusing(false);     // We fuse manually in this test in the setup

            _materializer = _system.Materializer(settings);
            _testElements = Enumerable.Repeat(0, ElementCount).Select(i => new MutableElement(i)).ToArray();
            var testSource    = Source.FromGraph(new TestSource(_testElements));
            var testSink      = Sink.FromGraph(new CompletionLatch());
            var identityStage = new IdentityStage();

            _singleIdentity    = Fuse(testSource.Via(identityStage).ToMaterialized(testSink, Keep.Right));
            _chainOfIdentities =
                Fuse(
                    testSource.Via(identityStage)
                    .Via(identityStage)
                    .Via(identityStage)
                    .Via(identityStage)
                    .Via(identityStage)
                    .Via(identityStage)
                    .Via(identityStage)
                    .Via(identityStage)
                    .Via(identityStage)
                    .Via(identityStage)
                    .ToMaterialized(testSink, Keep.Right));

            _singleSelect = Fuse(testSource.Select(Add).ToMaterialized(testSink, Keep.Right));

            _chainOfSelects = Fuse(
                testSource.Select(Add)
                .Select(Add)
                .Select(Add)
                .Select(Add)
                .Select(Add)
                .Select(Add)
                .Select(Add)
                .Select(Add)
                .Select(Add)
                .Select(Add)
                .ToMaterialized(testSink, Keep.Right));

            _repeatTakeSelectAndAggregate =
                Fuse(Source.Repeat(new MutableElement(0))
                     .Take(ElementCount)
                     .Select(Add)
                     .Select(Add)
                     .Aggregate(new MutableElement(0), (acc, x) =>
            {
                acc.Value += x.Value;
                return(acc);
            }).ToMaterialized(testSink, Keep.Right));

            _singleBuffer =
                Fuse(testSource.Buffer(10, OverflowStrategy.Backpressure).ToMaterialized(testSink, Keep.Right));

            _chainOfBuffers =
                Fuse(
                    testSource.Buffer(10, OverflowStrategy.Backpressure)
                    .Buffer(10, OverflowStrategy.Backpressure)
                    .Buffer(10, OverflowStrategy.Backpressure)
                    .Buffer(10, OverflowStrategy.Backpressure)
                    .Buffer(10, OverflowStrategy.Backpressure)
                    .Buffer(10, OverflowStrategy.Backpressure)
                    .Buffer(10, OverflowStrategy.Backpressure)
                    .Buffer(10, OverflowStrategy.Backpressure)
                    .Buffer(10, OverflowStrategy.Backpressure)
                    .Buffer(10, OverflowStrategy.Backpressure)
                    .ToMaterialized(testSink, Keep.Right));

            var broadcastZipFLow = Flow.FromGraph(GraphDsl.Create(b =>
            {
                var bcast = b.Add(new Broadcast <MutableElement>(2));
                var zip   = b.Add(new Zip <MutableElement, MutableElement>());

                b.From(bcast).To(zip.In0);
                b.From(bcast).To(zip.In1);
                var outlet =
                    b.From(zip.Out).Via(Flow.Create <(MutableElement, MutableElement)>().Select(t => t.Item1));
                return(new FlowShape <MutableElement, MutableElement>(bcast.In, outlet.Out));
            }));

            var balanceMergeFlow = Flow.FromGraph(GraphDsl.Create(b =>
            {
                var balance = b.Add(new Balance <MutableElement>(2));
                var merge   = b.Add(new Merge <MutableElement>(2));

                b.From(balance).To(merge);
                b.From(balance).To(merge);

                return(new FlowShape <MutableElement, MutableElement>(balance.In, merge.Out));
            }));

            _broadcastZip = Fuse(testSource.Via(broadcastZipFLow).ToMaterialized(testSink, Keep.Right));

            _balanceMerge = Fuse(testSource.Via(balanceMergeFlow).ToMaterialized(testSink, Keep.Right));

            _broadcastZipBalanceMerge = Fuse(testSource.Via(broadcastZipFLow).Via(balanceMergeFlow).ToMaterialized(testSink, Keep.Right));
        }
Пример #2
0
 public Logic(IdentityStage stage) : base(stage.Shape)
 {
     SetHandler(stage.In, onPush: () => Push(stage.Out, Grab(stage.In)));
     SetHandler(stage.Out, onPull: () => Pull(stage.In));
 }