/ Modelo de consumidor / produtor com distribuição uniforme de carga com N1: N2:…: NM - algoritmo, estruturas de dados, lógica

Modelo de consumidor de produtor com distribuição de carga uniforme com N1: N2:…: NM - algoritmo, estruturas de dados, lógica

Eu tenho que implementar um cenário de consumidor produtor,onde existe um número de produtores (digamos P) e N (digamos N = 3) de consumidores (digamos C1, C2, C3). Agora, o requisito é que a carga seja compartilhada entre os consumidores, para que C1 : C2 : C3 = 1 : 3 : 6. O que significa que P deve fornecer 10% to C1, 30% to C2 and 60% to C3 e essa distribuição deve ser uniforme.

por exemplo. digamos que P produz 10 itens. se o método counter for aplicado junto com o round robin, o cenário será semelhante a abaixo

items 1,2,3 goes to C1, C2, C3,  // C1 is done here with its 10%
items 4,5,6 goes to C2, C3, C2,  // C2 is done here with its 30%
items 7,8,9 goes to C3, C3, C3,  // C3 is bearing continuous load
item  10    goes to C3

Mas aqui a distribuição não era uniforme, C3 está carregando carga contínua, o que falha no objetivo.

A distribuição ideal teria algo como

items 1,2,3 goes to C3, C2, C3,
items 4,5,6 goes to C3, C2, C3,
items 7,8,9 goes to C3, C1, C3,
item  10    goes to C2

Eu tentei fornecer um exemplo hipotéticoaqui. No cenário real, a contagem não será predefinida, ao contrário de 10 no exemplo acima. No cenário real, o produtor continuará produzindo e é um processo interminável. Por exemplo, imagine um pedágio com três pedágios C1, C2, C3 em que número veículos que passam pelos portões devem estar na proporção de 1 : 3 : 6 e a distribuição deve ser uniforme. Por favor, sugira um algoritmo eficiente para implementar isso.

Respostas:

1 para resposta № 1

Uma maneira de fazer isso seria o produtorgere um número aleatório de 1 a 10, inclusive. Se o número for 1, o item vai para C1. Se o número for 2, 3 ou 4, ele passa para C2. Se o número estiver no intervalo de 5 a 10, o item passará para C3.

Observe que isso não garante que oa distribuição será perfeita em cada 10 itens, mas, assumindo um gerador de números aleatórios razoavelmente bom, as distribuições estarão muito próximas do seu 1: 3: 6 em um grande número (milhares) de itens.


1 para resposta № 2

Eu sugiro que você use uma variante da classificação topológica.

c3 inicia; c2 espera até c2 = c3 + 1; da mesma forma, c1 espera até c1 = c2 + 1;

Dessa forma, a distribuição será como:

c3 c3 c2
c1 c3 c2
c3 c2 c3
c3

Este é apenas um exemplo que eu forneci. Você pode optar por liberar os consumidores com base em lógica semelhante