Como o operador share () do RxJs 5 funciona?

Não está 100% claro para mim como os RxJs 5share() operador funciona, veja aqui odocumentos mais recentes. Jsbin para a perguntaaqui.

Se eu criar um observável com uma série de 0 a 2, cada valor será separado por um segundo:

var source = Rx.Observable.interval(1000)
.take(5)
.do(function (x) {
    console.log('some side effect');
});

E se eu criar dois assinantes desse observável:

source.subscribe((n) => console.log("subscriptor 1 = " + n));
source.subscribe((n) => console.log("subscriptor 2 = " + n));

Eu recebo isso no console:

"some side effect ..."
"subscriptor 1 = 0"
"some side effect ..."
"subscriptor 2 = 0"
"some side effect ..."
"subscriptor 1 = 1"
"some side effect ..."
"subscriptor 2 = 1"
"some side effect ..."
"subscriptor 1 = 2"
"some side effect ..."
"subscriptor 2 = 2"

Eu pensei que cada assinatura se inscreveria no mesmo Observable, mas não parece ser o caso! É como o ato de assinar cria um Observable completamente separado!

Mas se oshare() operador é adicionado à fonte observável:

var source = Rx.Observable.interval(1000)
.take(3)
.do(function (x) {
    console.log('some side effect ...');
})
.share();

Então temos isso:

"some side effect ..."
"subscriptor 1 = 0"
"subscriptor 2 = 0"
"some side effect ..."
"subscriptor 1 = 1"
"subscriptor 2 = 1"
"some side effect ..."
"subscriptor 1 = 2"
"subscriptor 2 = 2"

Qual é o que eu esperaria sem oshare().

O que está acontecendo aqui, como oshare()operador trabalha? Cada assinatura cria uma nova cadeia Observable?

questionAnswers(2)

yourAnswerToTheQuestion