Threads - Importância dentro de um software
Este artigo engloba todas as funcionalidades das threads dentro do sistema operacional e dentro de futuros softwares que vocês desejarem construir. Aqui usarei exemplos em Python para poder demonstrar a funcionalidade das threads dentro do nosso dia a dia do desenvolvimento.
Introdução a Threads
Threads em inglês significa linha de execução, é uma forma de um processo dividir a si mesmo em duas ou mais tarefas que podem ser executadas concorrentemente (fonte: Wikipédia)
Não apenas nos SOs temos threads. Processadores Intel também possuem threads para aumentar sua eficiência. Os processadores Pentium HT foram os primeiros da Intel a terem multi-threads implementados onde seu SO entendia que havia dois processadores, mas na verdade havia um com duas threads, que auxiliavam na execução do seu SO e aplicações.
Para um problema como esse você deve usar o máximo de seu processador, caso você resolva fazer isso em C sem usar nenhuma forma de multi-thread, ele vai usar apenas um núcleo de seu super computador. E assim todo o dinheiro investido em um processador muito eficiente não valeu de nada. Neste caso o ideal para um quad-core seria o programador usar pelo menos 4 threads para esse problema. Pois o SO iria ser o responsável por enviar os dados para os núcleos do processador. Assim aumentando a eficiência do software, sendo assim iria aumentar a eficiência em pelo menos quatro vezes.
Esta forma de programação é chamada de programação concorrente, onde temos um software que processa dados em várias threads otimizando o resultado final.
Um pouco de história
Dentro de um sistema operacional temos as funções de threads em nosso dia a dia, hoje em dia todos os SOs trabalham com multi-threads, pois quem se lembra do antigo MS-DOS ou das primeiras versões do GNU/Linux sabe que não era possível executar mais de uma tarefa ao mesmo tempo, já que qualquer tarefa executada dentro do SO tomava 100% do processador. Após alguns anos foi visto que muitas aplicações não tomavam 100% do processamento do processador, isso era uma grande perda de tempo dentro dos SOs. Até que foi criada a ideia de multi-threads, onde se dividiam as linhas de execução dentro do SO aumentando sua eficiência.Não apenas nos SOs temos threads. Processadores Intel também possuem threads para aumentar sua eficiência. Os processadores Pentium HT foram os primeiros da Intel a terem multi-threads implementados onde seu SO entendia que havia dois processadores, mas na verdade havia um com duas threads, que auxiliavam na execução do seu SO e aplicações.
Threads no seu dia-a-dia
Muitos desenvolvedores iniciantes nem sabem o que são threads e muito menos sabem qual a sua função dentro de um software. Isso é muito ruim, pois se temos um jovem programador que compra um Quad-core da Intel achando que sua aplicação vai funcionar mais rápido pois vai trabalhar com quatro núcleos ao invés de um está completamente errado. Pois se o programador desenvolver um software usando orientação a objeto ou uma linguagem estruturada muito complexo, onde tem que fazer, por exemplo, 40 comparações entre strings gigantescas e para isso usam uma classe ou uma função onde após comparar uma vai para a próxima e assim sucessivamente. Não adiante ter um dual - core, quad-core ou um octa-core, pois o problema está na forma do desenvolvimento.Para um problema como esse você deve usar o máximo de seu processador, caso você resolva fazer isso em C sem usar nenhuma forma de multi-thread, ele vai usar apenas um núcleo de seu super computador. E assim todo o dinheiro investido em um processador muito eficiente não valeu de nada. Neste caso o ideal para um quad-core seria o programador usar pelo menos 4 threads para esse problema. Pois o SO iria ser o responsável por enviar os dados para os núcleos do processador. Assim aumentando a eficiência do software, sendo assim iria aumentar a eficiência em pelo menos quatro vezes.
Esta forma de programação é chamada de programação concorrente, onde temos um software que processa dados em várias threads otimizando o resultado final.