Você está na página 1de 22

Thread / Task

Seções

01 Introdução 03 Para que serve?

02 O que é? 04 Conclusão
Introdução
Até o final da década de 1970 os sistemas operacionais suportavam apenas processos com uma única tarefa, o que
se tornou uma complicação quando as aplicações foram se tornando cada vez mais complexas, por exemplo: um
editor de texto geralmente executa várias tarefas simultaneamente, como formatação, paginação e verificação
ortográfica. Essas demandas demonstraram a necessidade de suportar mais de uma tarefa operando sobre os
mesmos recursos, ou seja, dentro do mesmo processo.

1
O que é? (Definição)
Thread, traduzindo para o português significa fio ou linha, porém, sua definição em SO é de um "fluxo de
execução". Simplificando, significa que ele é uma lista de instruções que um processo deve seguir para executar sua
função. Uma coisa que é importante ressaltar é que todo processo possui, no mínimo, uma thread.

Processo Thread

2 2
O que é? (Mono/Multi Threads)
Existem processos com quantias diferentes de threads, os que contém apenas uma thread são chamados de
Monothread, e caso haja mais, o nome será Multithread. Com a existência de múltiplos threads é possível
aplicações trabalhando de forma simultânea, concorrente e assíncrona. Além disso, é necessário conhecer o sistema
operacional, pois sistemas mais antigos, como o MS-DOS, podem não possuir suporte nativo para multithreading.
Nesses sistemas, é possível aplicar técnicas para simular multithreading, embora essas abordagens sejam menos
eficientes e mais complexas de serem implementadas.

Concorrente CPU Task 1 Task 2 Task 1 Task 2

CPU Task 1

Simultâneo
Monothread Multithread
CPU Task 2
3
Quando é necessário usar (Mono Threads)
As Mono threads podem ser necessários em situações onde:
- Quando uma tarefa é simples e linear, não exigindo operações simultâneas.
- Quando a sobrecarga de gerenciamento de múltiplas threads é indesejada ou desnecessária.
- Quando não há benefícios claros de desempenho ao dividir a tarefa em múltiplas threads.
Em resumo, mono threads são utilizados quando a aplicação ou tarefa é simples.

4
Quando é necessário usar (Multi Threads)
É necessário usar Multi Threads quando há tarefas independentes que podem ser executadas simultaneamente para
melhorar o desempenho do programa, ou seja, quando há várias tarefas que podem ser feitas juntas, e podemos usar
isso especialmente em sistemas multi-core, que é um tipo de processador que possui dois ou mais núcleos de
processamento, facilitando o uso de multi threads.

5
O que é? (Diferenças)
Enquanto os processos possuem recursos próprios, em outras palavras, que não compartilham espaço de
endereçamento, contexto de software e contexto de hardware com outros processos. As threads compartilham
espaço de endereçamento e contexto de software com seu respectivo processo, logo, elas também compartilham
estes recursos entre si, tendo apenas o contexto de hardware como particularidade de cada thread.

6
O que é? (TCB)
Threads são implementados através de um estrutura chamada TCB (Bloco de Controle de Thread), essa estrutura
armazena contexto de hardware, dentre outras informações relativas a thread, como: TID, PC, prioridade, estado de
execução, pilha, ponteiro para PCB.

7
O que é? (User threads)
Threads de usuário são implementadas pelas aplicações e não pelo sistema operacional. Ou seja, elas devem ser
fornecidas através de uma “biblioteca” vinda da linguagem de programação, para a criação, remoção, comunicação
ou escalonamento de threads. Desta forma, o sistema não reconhece a existência de múltiplas threads, o que resulta
na aplicação tendo que gerenciar e sincronizar as threads.

8
Quando é necessário usar (User Threads)
É necessário usar user threads quando precisa ter um controle sobre as threads sem envolver o kernel do sistema
operacional, isso significa que o kernel do sistema operacional não está diretamente envolvido na criação,
escalonamento ou no gerenciamento, também usamos quando a eficiência e o uso de recursos são prioridades.

9
O que é? (Kernel Threads)
Threads de Kernel são implementadas pelo núcleo do sistema operacional. O sistema operacional reconhece cada
thread e escalona de forma individual.

10
Quando é necessário usar (Kernel Threads)
Kernel threads são necessárias em situações que requerem acesso direto a recursos de kernel, alto desempenho,
privilégios elevados ou operações de longa duração que podem impactar o funcionamento geral do sistema
operacional. Elas oferecem maior controle e flexibilidade em comparação com user threads, mas também podem ter
uma sobrecarga de gerenciamento mais significativa.

11
Para que serve? (Thread)
O conceito de thread foi criado com o intuito de reduzir o tempo que se leva para criar um novo processo, que pode
ser tanto um monothread ou multithread, que são execuções de processos em um SO, onde:

Monothread: Executa apenas uma thread de cada vez, onde a execução das tarefas ocorre de maneira sequencial,
sendo menos eficiente na questão de aproveitamento de recursos;
Multithread: É um sistema que permite a execução simultânea de várias threads, sendo essas threads unidades
independentes de execução dentro de um processo, possibilitando a execução concorrente de diferentes partes de
um programa, melhorando o desempenho e responsividade de aplicativos.

Monothread Multithread 12
Para que serve? (Thread)
Quando falamos em thread, especialmente em multithreads, podemos dizer que um processo, ou os seus
subprocessos, estão ocupando o mesmo endereço em memória, reduzindo o tempo de comunicação entre
processos.

13
Para que serve? (Sincronização de Thread)
Thread Synchronization - A sincronização de threads é um aspecto crucial da programação, utiliza técnicas e
mecanismos para coordenar e controlar o acesso concorrente a recursos compartilhados entre threads, como o
nome diz, é a sincronização das threads, e isso é usado a fim de evitar condições de corrida e inconsistências de
dados.
Variável de Condição

Semáforo

Mutex

14
Quando é necessário usar (Threads Synchronization)
É necessário usar a sincronização de thread quando há acesso concorrente a recursos compartilhados entre threads,
garantindo que os dados sejam manipulados de forma segura e consistente, sem ocorrer bagunça entre as threads.

15
Para que serve? (Segurança de Thread)
Thread Safety - Projetar e implementar algoritmos e estruturas de dados de modo que possam ser usados de forma
segura por múltiplas threads simultaneamente, sem causar resultados inesperados ou corrupção de dados.

- Imutabilidade: Isso significa que uma vez que algo é criado, não pode ser alterado. Se algo parece mudar, na
verdade estamos criando uma nova versão em vez de modificar o original, deixando assim muito mais seguro.
- Bloqueio: Isso é como uma porta que só pode ser aberta por uma pessoa de cada vez. Garante que apenas uma
thread possa acessar um recurso compartilhado de cada vez, para evitar bagunça, ou seja, se uma thread acessar um
recurso, as outras não vão poder acessar até que essa thread pare de acessar esse recurso.
- Atomicidade: Isso significa que uma operação é feita de uma vez só, sem ser interrompida no meio. Como um
movimento único que não pode ser dividido, ou seja, se você começar a criar uma operação, você tem que ir até o
fim, não pode parar e depois continuar. Começou, tem que terminar.

16
Para que serve? (Tipos de Comunicação)
Tipos de Comunicação das threads:

- Compartilhamento de Memória: É como se todas as pessoas em uma equipe compartilhassem um quadro branco
gigante. Cada pessoa pode escrever ou ler informações nesse quadro para que todos saibam o que está acontecendo.
- Troca de Mensagens: É como enviar notas ou cartas para outras pessoas na equipe. Cada pessoa pode enviar uma
mensagem para outra e receber mensagens de volta.

Essas são as formas básicas de comunicação entre threads. É importante que as threads se comuniquem de
forma clara e organizada para garantir que o trabalho em equipe seja eficiente e que não ocorram problemas
de coordenação.

17
Para que serve? (Macroprocesso)
O macroprocesso é como a empresa organiza suas principais atividades para alcançar seus objetivos e missão. Ele
inclui as funções organizacionais, que devem estar alinhadas com os objetivos da empresa. É como se fosse uma
lista do que fazer.

18
Quando é necessário usar (Macroprocesso)
É necessário usar Macroprocesso quando é preciso organizar e gerenciar processos que são relacionados,
especialmente em situações em que um processo pai precisa controlar e coordenar múltiplos processos filhos, ou
seja, um processo principal que precisa ser feito, mas para ser concluído, precisa que outros processos sejam feitos
primeiro.

19
Conclusão
Em resumo, o uso de threads em sistemas operacionais oferece:

● Flexibilidade;
● Melhora no desempenho;
● Permite a execução concorrente de tarefas;
● Contribui para uma melhor utilização dos recursos do sistema, desempenhando um papel fundamental em sua
otimização.

No entanto, é crucial ter em mente os desafios associados à sincronização e à comunicação entre threads para
evitar problemas de concorrência e garantir a consistência dos dados. Por último, as threads oferecem uma
poderosa ferramenta para os desenvolvedores de sistemas, permitindo a criação de aplicativos mais rápidos,
responsivos e escaláveis em uma variedade de plataformas e ambientes operacionais.

20

Você também pode gostar