Pergunta

Tenho uma pergunta sobre a implementação do PTHread no Linux.

Suponha que um processo tenha 5 threads. Agora, como o agendador vê esses threads (ou não vê nada). Por exemplo, quando o agendador é chamado, ele agenda apenas o processo principal e, em seguida, é o ônus do processo principal para agendar entre cada um de seu thread.

Ou é de outra maneira que o agendador agenda cada thread como se fosse um processo separado.

Foi útil?

Solução

Para o Linux moderno (implementação do NPTL PTHRAD), os threads Scheduler Schedules, um thread é considerado um "processo leve". pthread_create é implementado em termos do clone Chamada do sistema.

Outras dicas

O Linux agenda todos os threads como se fosse um processo com escopo como pthread_scope_system. A implementação do NPTL pode utilizar várias CPUs.

Como Logan disse, todo segmento é agendado de forma independente.

No entanto, se você deseja usar grupos de controle de processos Linux para agendar grupos de threads.

Os grupos de controle de processos tornam o agendamento um pouco mais ineficiente, mas pode ser muito mais justo.

Um uso que se tornou muito popular é colocar todos os processos e threads criados por cada TTY em um grupo de controle por TTY. Isso resulta em todos os aplicativos gráficos de um usuário sendo agendados no mesmo nível que seu compilação de kernel de 24 thread que ele lançou em uma janela de terminal. Os aplicativos gráficos recebem 50% e a compilação recebe 50%. Se ele abrir outra janela do terminal e começar a compilar o GLIBC com outros 24 threads, ele muda para 33% de aplicativos de mesa, 33% de compilação do kernel e 33% de compilação do glibc.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top