quarta-feira, 11 de fevereiro de 2009

Threads at Work PARTE 1



THREADS


Basicamente, threads são linhas de execuções que possuem mesmo contexto de software vinculados á espaços de memoria de um processo pai, porem possuem contexto de hardware diferente.Desta forma, podemos caracteriza-las como processos leves, ja que o escalonamento de threads é muito mais barato e leve do que o escalonamento de processos(OS que faz isso!!).

O QUE POSSO FAZER COM THREADS?

A vantagem do uso de threads se mostra em diversas areas como:
  • Swing(Aplicações Desktop)
  • I/O(Arquivos, Base de Dados)
  • Networking(Sockets, HTTP Connections)
  • Clusters(RMI, EJB,JXTA)
  • Robotics(Threads para sensores)
Mas o ambiente de utilização de programação usando threads é muito maior. Podemos fazer com que nossas aplicações façam calculos extensivos em tarefas diferentes e quando estes terminarem nossa GUI é então atualizada, sem que a interface fique congelada, algo que pode ocorrer em calculos muito complexos. Da mesma maneira, não precisamos esperar que todo um arquivo(ou stream de dados) seja transferido por completo, para que possamos fazer outras ações. Alem disso, em muitas aplicações temos que atender a inumeras requisiçõesde inumeros clientes da aplicação, fazer milhares de calculos em paralelo ou esperar por inumeros eventos e executa-los de forma paralela.
O QUE É AMBIENTE MULTITHREAD OU MULTITAREFA??

Um processo que pode se dividir sua missão em diversas tarefas, tornando sua execução multitarefa ou multithread. Porem a programação com threads tem alguns topicos que tornam aplicações com threads um vasto assunto e complexas, como o caso onde ocorre algum deadlock. Deadlock ou "abraço da morte" pode ser entendido da seguinte maneira:
  • Thread t1 invoca um metodo 1 que tenta acessar algum metodo 2 de uma Thread t2
  • Ao ser invocado, o metodo 2 da t2 chama o metodo 1 de t1 que ainda espera o retorno do metodo 2 que pelo que podemos notar, noa ira retornar
Basicamente o que acontece é um loop infinito ,pois um sempre que uma thread invoca seu metodo ele espera retorno e o metodo intrinseco deste espera o retorno do primeiro metodo. Confuso não??Se é para você imagine para seus programas e seus clientes!! Devemos sempre lembrar (pois todos conhecem de sistemas operacionais!!) que se você necessita que suas operações ocorram em um determinada ordem, você nao esta programando de forma multithreaded,e sim de forma convencional sequencial. Se mesmo assim você utilizar tal recurso, muitos bugs graves podem acontecer de forma a corromper seus dados.Tudo isso ocorre porque o programador não tem controle sobre como são escalonados suas threads, este papel e do sistema operacional.Portanto se tarefas necessitam ser executadas em paralelo, então elas devem ser mutuamente exclusivas ou seja, não devem "depender de dados de outras tarefas". Um thread possui estados finitos que caracterizam basicamente seu ciclo de execução:
  • criada
  • executando
  • pronto
  • bloqueio
  • termino
A thread é criada.Se ela for escalonada ela entra no estado de execução e e segue efetuando seus calculos.Se ocorre a troca de contexto, antes dela terminar , a thread entra na fila de threads prontas, que esperam uma proxima oportunidade para executar.No caso de uma operação I/O por exemplo, a thread é bloqueada enquanto aguarda o sinal de termino da operação, emitido por algum dispositivo,fazendo com que o sistema operacional escalone a thread que iniciou a operação para que esta possa continuar sua execução.Quando todos os calculos são concluidos, ela termina.

Nos proximos posts mostraremos caracteristicas que fazem do Java uma otima linguagem para criar programas multitarefa, e muitos exemplos de como faze-lo!
Links Interessantes

Marcadores:

0 Comentários:

Postar um comentário

Assinar Postar comentários [Atom]

<< Página inicial