Requesting a clear, picturesque explanation of Reactive Extensions (RX)?

后端 未结 2 1904
-上瘾入骨i
-上瘾入骨i 2021-01-31 00:03

For a long time now I am trying to wrap my head around RX. And, to be true, I am never sure if I got it - or not.

Today, I found an explanation on http://reactive-extens

2条回答
  •  南方客
    南方客 (楼主)
    2021-01-31 01:04

    Along with Paul's excellent answer I'd like to add the concept of pulling vs pushing data.

    Pipeline

    Lets take the example of some code that generates a series of numbers, and outputs the result. If you think of this as a stream on one end you have a producer that is creating new numbers for you, and on the other end you have a consumer that is doing something with those numbers.

    Pull - Primes List

    Lets say the producer is generating a list of prime numbers. Normally you would have some function that yields a list of numbers, and every time it returned it would push the next value it has calculated through the pipe to the consumer, which would output that number to the screen.

    Prime Generator ---> Console.WriteLine

    In this scenario it is easy to see that the producer is doing most of the work, and the consumer would be sitting around waiting for the producer to send the next value. The consumer is pulling on the pipeline, waiting for the producer to return the next value.

    Push - Progress percent events from a fast process (Reactive)

    Ok, let's say you have a function that is processing 1,000,000 items. Each item takes milliseconds to process, and then the function yields out a percentage value of how far it has gotten. So lots of progress values, very fast.

    At the other end of the pipeline you have a progress bar. Now if the progress bar was to handle every update the UI would block trying to keep up with the stream of values.

    1-Million-Items-Processor ---> Progress Bar

    In this scenario the data is being pushed through the pipeline by the producer and then the consumer is blocking because too much data is being pushed for it to handle.

    Reactive allows you to put in delays, windows, or to sample the pipeline depending on how you wish to consume the data. In this case I would sample the data every second before updating the progress bar.

    Lists vs Events

    So lists and events are kinda the same. The difference is whether the data is pulled or pushed through the system. With lists the data is pulled. With events the data is pushed.

提交回复
热议问题