The emitted values are very simple, but we will receive all the values from the first observable before we start receiving values from the second. Below is a diagram showing the order of emitted events. Values from the first observable are in shown in green and values from the second observable are in blue.

Merge

Merge is similar to concat, but it will interleave the emitted values instead of completing the first observable before starting the second one.

In the diagram you can see the values from both observables interleaved with alternate green and blue boxes.

forkJoin

We use forkJoin to execute observables in parallel. One common use case of this is making multiple http requests in parallel. In my sample I am forkJoining two very simple observables, but the key point is that the subscriber won't receive any values until both observables have completed.