Processo de encadeamento no linux

3

Eu estou querendo saber sobre a "punição" que ocorre quando um novo segmento é criado.

Do meu entendimento do clone (2), NPTL (Nova Biblioteca de Encadeamentos POSIX), CFS (Completely Fair Scheduler), quando um novo encadeamento é criado, ele é visto como um novo processo porque o NPTL usa um modelo de encadeamento 1: 1.

Do que eu leu sobre o agendador, quando um novo processo é adicionado à execução -queue, a variável fair_clock aumenta para uma fração do clock de parede.

De picar em torno dos rituais com pthread_create (3), o clone é eventualmente chamado exatamente como seria em um fork (2).

Agora, um processo terá um modelo 1: 1 e, assim, threads. Então, um tópico também sofre esse mesmo destino exato ? Obviamente, um thread deve ser punido de alguma forma, ou então um processo muti-threaded pode ocupar a maior parte do tempo da CPU, preenchendo o sistema RR (round robin) que o CFS usa.

Se este for true, quais são as vantagens de usar threads sobre forks? É apenas o espaço de heap compartilhado automático (em oposição ao uso de shm_open (2))?

    
por SailorCire 19.10.2014 / 03:40

1 resposta

1

A partir do link que forneci sobre o Completely Fair Scheduler, vemos que no kernel 2.6.24 tem o que é chamado de programação de grupo.

Para citar Chandandeep Singh Pabla:

For example, let's say there is a total of 25 runnable processes in the system. CFS tries to be fair by allocating 4% of the CPU to all of them. However, let's say that out of these 25 processes, 20 belong to user A while 5 belong to user B. User B is at an inherent disadvantage as A is getting more CPU power than B. Group scheduling tries to eliminate this problem. It first tries to be fair to a group and then to individual tasks withing that group. So, CFS with group scheduling enabled, will allocate 50% of the CPU to each user A and B. The allocated 50% share of A will be divided among A's 20 tasks, while the other 50% of the CPU time will be distributed fairly among B's 5 taks.

Agora, isso se aplica à pergunta acima, porque quando um processo gera um novo thread, ele estará nesse grupo de agendamento de processos. Isso impede que um programa que gera 1000 threads sobrecarregem todo o tempo da CPU, porque ele só obterá 1 / 1001th (1000 encadeamentos mais o programa original) do tempo de execução desse grupo de processos específico.

Assim, diminuindo a quantidade de tempo que um encadeamento é comparado ao sistema inteiro, isso pune corretamente os aplicativos encadeados.

    
por 21.10.2014 / 17:24