Neste artigo, entenderemos o modelo multithreading no sistema operacional.
Modelo multithread:
Multithreading permite que o aplicativo divida sua tarefa em threads individuais. Em multithreading, o mesmo processo ou tarefa pode ser feito pelo número de threads, ou podemos dizer que existe mais de um thread para realizar a tarefa em multithreading. Com o uso de multithreading, a multitarefa pode ser alcançada.
matriz de código c de strings
A principal desvantagem dos sistemas de thread único é que apenas uma tarefa pode ser executada por vez; portanto, para superar a desvantagem desse thread único, existe o multithreading que permite a execução de múltiplas tarefas.
Por exemplo:
No exemplo acima, client1, client2 e client3 estão acessando o servidor web sem qualquer espera. No multithreading, várias tarefas podem ser executadas ao mesmo tempo.
Em um sistema operacional, os threads são divididos em threads de nível de usuário e threads de nível de kernel. Threads de nível de usuário manipulados de forma independente acima do kernel e, portanto, gerenciados sem qualquer suporte de kernel. Por outro lado, o sistema operacional gerencia diretamente os threads no nível do kernel. No entanto, deve haver uma forma de relacionamento entre threads em nível de usuário e em nível de kernel.
Existem três modelos multithreading estabelecidos que classificam esses relacionamentos:
- Modelo multithreading muitos para um
- Modelo multithreading um para um
- Muitos para muitos modelos multithreading
Modelo multithreading muitos para um:
O modelo muitos para um mapeia muitos threads de níveis de usuário para um thread de kernel. Esse tipo de relacionamento facilita um ambiente de troca de contexto eficaz, facilmente implementado mesmo no kernel simples, sem suporte a threads.
formulário completo do cdr
A desvantagem deste modelo é que, como existe apenas um escalonamento de threads no nível do kernel em um determinado momento, este modelo não pode aproveitar a aceleração de hardware oferecida por processos multithread ou sistemas multiprocessadores. Neste, todo o gerenciamento de threads é feito no espaço do usuário. Se ocorrer bloqueio, este modelo bloqueia todo o sistema.
comentários java
Na figura acima, o modelo muitos para um associa todos os threads de nível de usuário a threads únicos de nível de kernel.
Modelo multithreading um para um
O modelo um para um mapeia um único thread de nível de usuário para um único thread de nível de kernel. Esse tipo de relacionamento facilita a execução de vários threads em paralelo. No entanto, esse benefício traz consigo sua desvantagem. A geração de cada novo thread de usuário deve incluir a criação de um thread de kernel correspondente, causando sobrecarga, o que pode prejudicar o desempenho do processo pai. A série Windows e os sistemas operacionais Linux tentam resolver esse problema limitando o crescimento da contagem de threads.
Na figura acima, um modelo associa aquele thread de nível de usuário a um único thread de nível de kernel.
Modelo muitos para muitos modelo multithreading
Neste tipo de modelo, existem vários threads em nível de usuário e vários threads em nível de kernel. O número de threads de kernel criados depende de um aplicativo específico. O desenvolvedor pode criar tantos threads em ambos os níveis, mas pode não ser o mesmo. O modelo muitos para muitos é um compromisso entre os outros dois modelos. Neste modelo, se algum thread fizer uma chamada de sistema de bloqueio, o kernel pode agendar outro thread para execução. Além disso, com a introdução de múltiplos threads, a complexidade não está presente como nos modelos anteriores. Embora este modelo permita a criação de vários threads de kernel, a verdadeira simultaneidade não pode ser alcançada por este modelo. Isso ocorre porque o kernel pode agendar apenas um processo por vez.
Muitas ou muitas versões do modelo multithreading associam vários threads de nível de usuário à mesma ou muito menor variedade de threads de nível de kernel na figura acima.