Baixe o app para aproveitar ainda mais
Prévia do material em texto
THREADS Prof. Eng. Eduardo Juliano Alberti(Adpatado de Prof. Alessandro Brawerman) INTRODUÇÃO Sistemas Operacionais habilitavam computadores a executar diversos programas concorrentes, porém os programadores ainda não podiam especificar atividades concorrentes em seus programas. A partir de 1980, a linguagem de programação Ada fornecer de maneira explícita, formas de criar programação concorrente (de forma primitiva, claro). 2 INTRODUÇÃO Muitas linguagens hoje fornecem técnicas para permitir a programação concorrente através de threads. Cada thread dá a capacidade, ao programa, de executar uma tarefa de forma simultânea ao programa principal. Esta técnica chama-se Multithreading. 3 O QUE É THREAD Um thread simboliza o fluxo de instruções que podem executar concorrentemente em um processo e cooperar para atingir uma meta em comum. Um thread é um subconjunto de recursos contidos em um processo. Um processo pode conter n Threads que podem executar simultaneamente diversas partes da inteligência de um processo. 4 MAS PORQUE UTILIZAR? Durante o projeto do software pode-se especificar partes de código que serão executadas independentemente do restante da aplicação. Isso melhora o desempenho da aplicação e deixa mais simples exprimir tarefas que serão executadas paralelamente. 5 MAS PORQUE UTILIZAR? Uma aplicação pode ser executada sequencialmente, o que pode incidir em um tempo considerável. Com o uso de Threads, uma aplicação pode ter seu tempo requerido reduzido significativamente, pois várias tarefas serão executadas paralelamente. 6 MAS PORQUE UTILIZAR? Atividades, muitas vezes, dependem de algumas tarefas independentes. No caso, por exemplo, de soluções que dependem de leitura de dados ou sincronia de informações, um único processo sequencial deveria periodicamente parar sua execução para realizar tais ações. Em um sistema multhread tais tarefas são paralelizadas, ou seja, se tornam independente do código principal. Isso facilita no processamento de dados. Desta forma podemos afirmar que as threads trabalham de forma cooperativa. 7 MAS PORQUE UTILIZAR? Se pensarmos desta forma, as threads tornam as interfaces gráficas mais responsivas. Em um sistema monothread, sua aplicação para na espera de alguma informação. Em uma interface gráfica isso não é admissível. Desta forma, threads mantem tarefas ativas enquanto outras threads cuidam na interface gráfica. 8 ESTADOS DE UM THREAD 9 Criado e pronto para execução Aguardando E/S Processamento Finalizado “pausado” por tempo determinado Aguardando por um evento interno É acordado por outro Thread OPERAÇÕES DE THREAD Assim como para processos, podemos: Criar Terminar Suspender Retomar Dormir Acordar 10 OPERAÇÕES DE THREAD Porém algumas operações são um pouco diferentes das utilizadas para a criação de processos: Cancelar Threads: Um cancelamento não garante que a thread termine sua execução Associação de Threads: Threads podem criar threads. O pai não pode ser terminado até que todos os threads filhos estejam finalizados também. Nesse caso, caso o thread pai termine suas tarefas ele será posto em estado dormir até que os threads filhos retornem como terminados. 11 MODELOS DE THREAD Existem 3 diferentes modelos de Threads que podem estar presentes em SOs. Thread de Usuário Thread de Núcleo Thread Híbrida 12 THREAD DE USUÁRIO Os threads de usuário executam operações em espaço de usuário. São criadas por bibliotecas em tempo de execução e não podem executar instruções privilegiadas nem acessar primitivas do núcleo de forma direta. São também denominadas de Threads Muitos-para-um pois o SO mapeia todos os threads de um processo para um único contexto de execução. 13 THREAD DE USUÁRIO 14 THREAD DE USUÁRIO O sistema operacional não está ciente da existência de múltiplos threads, bibliotecas de nível de usuário escalonam a execução Os threads de usuário não precisam que o SO suporte threads. Programadores podem ajustar a maneira na qual será realizado o escalonamento dos threads de modo a atender suas necessidades. 15 THREAD DE NÚCLEO Nos threads de núcleo o sistema operacional mapeia cada thread para seu próprio contexto de execução, desta forma são também chamadas de threads um-para-um. Os threads compartilham o espaço de endereçamento do seu processo. 16 THREAD DE NÚCLEO 17 THREAD DE NÚCLEO Tal modelo permite que o núcleo despache threads para diversos processadores ao mesmo tempo. O núcleo pode gerenciar cada thread individualmente, assim mesmo que algumas threads estejam bloqueadas dentro de um processo, o sistema ainda pode despachar threads prontas. 18 THREAD DE NÚCLEO Porém tendem a ser menos eficientes que os threads de usuário, pois podem implicar no aumento da sobrecarga. Dependem de sistemas que permitam o uso de Threads. Tendem a consumir mais recursos. 19 THREAD HÍBRIDA A implementação híbrida é a utilizada em sistemas Windows Também chamada de Muitos-para-muitos Nesta implementação muitos threads de usuários são mapeados para um conjunto de threads de núcleo, não obrigatoriamente 1:1. 20 THREAD HÍBRIDA 21 THREAD HÍBRIDA Tais implementações são limitadas pois não possuem padrão estabelecido entre os sistemas operacionais. Algumas operações podem não estar disponíveis quando comparados os sistemas operacionais. 22
Compartilhar