De que se trata o artigo

Este artigo apresenta uma breve introdução ao conceito de Threads e aplicações Multithread, um recurso que permite a execução de tarefas de maneira “paralela”, dando a impressão de que as mesmas são efetuadas ao mesmo tempo em um ambiente com apenas um processador, demonstrando assim as vantagens que podem ser obtidas, bem como a facilidade na utilização deste recurso através do Delphi, apresentando também uma maneira de criar uma aplicação de download de arquivos em conjunto com Threads e a Internet.

Em que situação o tema é útil

Aplicar o conceito de “simultaneidade” nas aplicações desenvolvidas para que as mesmas possam ser mais rápidas e eficientes, delegando às threads determinadas tarefas críticas que podem levar um maior tempo de execução, fazendo com que elas se encarreguem de tais tarefas, permitindo assim que o usuário possa fazer ações em paralelo na aplicação.

Threads e Multithread

Atualmente a utilização de threads nas aplicações é um diferencial que traz diversas vantagens para o usuário final, uma vez que podem aumentar o desempenho da mesma. Elas permitem que as tarefas possam ser executadas em paralelo ao fluxo principal da aplicação, possibilitando assim que a mesma continue acessível ao usuário. O Delphi traz consigo diversas classes e recursos que podem ser manipulados para a utilização deste conceito nas aplicações de uma maneira simplificada e de alta produtividade, uma vez que em determinados tipos de softwares, a utilização de threads se torna uma obrigação para que o mesmo possa oferecer a funcionalidade esperada. Este artigo tem por objetivo efetuar uma introdução sobre threads e alguns de seus conceitos, demonstrando também como utilizar este recurso para criar uma aplicação que efetue o download de arquivos de maneira paralela à aplicação principal.

A computação é um ambiente que está em constate evolução. Há muitos anos atrás várias aplicações eram baseadas no conceito monotarefa e monousuário, onde apenas um software poderia ser executado por vez e por apenas um usuário, uma antiga realidade que nos dias de hoje, diante de tantos softwares executando “simultaneamente”, parece inconcebível.

Thread é a unidade básica envolvida quando uma aplicação é executada em sistemas operacionais Unix, Windows, etc. Sendo assim, as threads que pertencem a determinado processo também são submetidas ao escalonamento, criando assim a impressão de que tudo é executado ao mesmo tempo com relação a um processador, devido ao rápido mecanismo de alternância envolvido nesta tarefa, salvo o fato de realmente executarem de maneira concorrente em múltiplos processadores. O escalonamento (scheduling) é uma atividade efetuada para permitir que diversos processos executem em paralelo com o objetivo de aumentar a produtividade, minimizando a sobrecarga e o tempo de resposta para os usuários, permitindo também que determinados processos possuam prioridades maiores que outros. Um exemplo de técnica de escalonamento é a implementação do recurso time slice (fatia de tempo), onde cada thread é alocada e executada pelo processador em um determinado período de tempo gerando tal impressão de “simultaneidade”. Contudo existem os ambientes Monothread e Multithread.

Em um ambiente Monothread, uma aplicação é composta por códigos que são executados sequencialmente, de acordo com repetições, desvios, funções e procedimentos, onde a utilização de concorrência é efetuada através da implementação de processos independentes e subprocessos, caso exista essa necessidade, causando um maior consumo de recursos do sistema, uma vez que cada processo detém seu próprio espaço de endereçamento e a comunicação entre os diversos processos envolvidos normalmente é mais lenta que no outro modo.

Em um ambiente Multithread, o conceito de thread é amplamente explorado e aplicado, onde técnicas permitem que as mesmas sejam executadas de maneira simultânea. Através da utilização deste recurso, os softwares podem efetuar diversas tarefas de maneira paralela, possibilitando assim que as threads exerçam suas funções de maneira independente umas das outras. Vale à pena evidenciar que os sistemas operacionais evoluíram para possibilitar a execução de diversos processos e threads, implementando mecanismos para que os softwares pudessem fazer uso de tal recurso de concorrência, como é o exemplo do escalonamento citado anteriormente. A utilização de várias threads é mais rápida que a utilização de vários subprocessos, pois as threads de um determinado processo compartilham o mesmo intervalo de endereço (address space), permitindo assim a troca de diversas informações entre ambas, não havendo a necessidade da utilização de outros mecanismos para a intercomunicação, como é o caso dos processos.

Apesar de sua popularidade no universo computacional, a utilização de threads muitas vezes não é adotada nas aplicações, seja para não fugir do modelo convencional de desenvolvimento ou por receio, contudo a utilização deste recurso é simples, principalmente no Delphi. Entretanto, assim como outras funcionalidades, alguns cuidados devem ser tomados ao fazer a implementação deste recurso, levando também em consideração que as threads devem manter a comunicação, o compartilhamento e a sincronização de dados de forma coerente. Sendo assim, uma boa prática na utilização de threads é trabalhar com variáveis e objetos privados, utilizando funções e procedimentos para o acesso aos mesmos, tomando cuidado com a comunicação e a sincronização das mesmas. Também vale a pena evidenciar que não há um limite lógico para a utilização de threads simultaneamente, entretanto os limites de hardware e Internet devem ser levados em consideração para não causar sobrecarga desnecessária ao sistema.

...
Quer ler esse conteúdo completo? Tenha acesso completo