Multithreading
Prof. Adriano Teixeira de Souza
   Thread (lightweight process) é uma unidade
    básica de utilização da CPU, compreendendo um
    id, um contador de programa, registradores e
    pilha

   Compartilha seção de código, seção de dados e
    outros recursos do SO pertencentes ao um
    mesmo processo




                         Prof. Adriano Teixeira de Souza
   Capacidade de Resposta
   Compartilhamento de Recursos
   Economia na criação de processos
   Uso de Arquiteturas Multiprocessador




                         Prof. Adriano Teixeira de Souza
   Threads de Usuário
    ◦ Implementadas por bibliotecas

   Threads de Kernel
    ◦ Suportadas diretamente pelo SO




                             Prof. Adriano Teixeira de Souza
   A maioria das linguagens de programação não
    permite programação de atividades concorrentes
   Normalmente as linguagens disponibilizam
    chamadas ao SO
    ◦ A biblioteca Win32 fornece um conjunto de APIs para
      efetuar multithreading em aplicações nativas Windows
    ◦ Pthreads fornece uma biblioteca para threads em
      sistemas POSIX, como linux
    ◦ C-threads no Mach
    ◦ Threads no Solaris


                            Prof. Adriano Teixeira de Souza
   Historicamente a linguagem ADA (DoD)
    disponibilizou primitivas de concorrência porém
    a linguagem não popularizou-se no meio
    acadêmico e comercial
   Java notavelmente é a única linguagem de uso
    geral e popular a disponibilizar as primitivas de
    concorrência para o programador de aplicativos
    (threads)
    ◦ Linguagens como C, C++ e Delphi fazem
      chamadas a primitivas de multithreading do SO
   Todo programa java possui pelo menos um
    thread de controle
    ◦ main executa num thread na JVM

                           Prof. Adriano Teixeira de Souza
   Explicitamente pode-se criar uma classe derivada da
    classe Thread, do package java.lang

   É necessário redefinir o método run(), que realmente
    realiza o trabalho

   O método start() cria efetivamente a thread
    ◦ Aloca memória e inicializa um novo thread na JVM
    ◦ Chama run() para tornar o thread passível de execução

   Construtores:
    ◦ public Thread (String threadName)
    ◦ public Thread()


                                 Prof. Adriano Teixeira de Souza
   Alternativamente pode-se criar uma classe que
    implementa a interface Runnable
    public interface Runnable {
       public abstract void run();
    }

   Toda classe que implementa Runnable deve
    definir o método run()
    class Teste implements Runnable {
       public void run() {
       }
    }

                         Prof. Adriano Teixeira de Souza
   start(): inicia a execução da thread (método run)
   suspend(): suspende a execução da thread que
    está executando
   sleep(): faz a thread que está executando dormir
    por um tempo determinado
   yield(): faz a thread que está executando dormir
    por um tempo indeterminado
   resume(): resume a execução de uma thread
    suspensa
   stop(): termina a execução de uma thread; a
    thread não pode ser mais executada.


                           Prof. Adriano Teixeira de Souza
   join(): método que espera o término da THREAD
    para qual foi enviada a mensagem para ser
    liberada.
   interrupt(): método que interrompe a execução
    de uma THREAD.
   interrupted(): método que testa se uma
    THREAD está ou não interrompida.




                         Prof. Adriano Teixeira de Souza
nascimento




                                             start



                                             pronto

                   Notify
                  Notifyall                                                  Conclusão E/S
                                    yeld            Despachar
                                               (alocar Processador)
Tempo expira
                           wait
                                                                      Inicia E/S
                                           executando
               esperando


                                                                                   bloqueado

                                                        completo
                                        sleep
                       adormecido




                                                      morto
                                                        morto


                                  Prof. Adriano Teixeira de Souza
   Além do programa multithread, outros threads
    executam assincronamente para a JVM
    ◦ Gerência de memória: coleta de lixo
    ◦ Eventos de temporização
    ◦ Controles gráficos




                              Prof. Adriano Teixeira de Souza
   Tipicamente a JVM é implementada sobre um SO
    host, ocultando detalhes de implementação

   Não indica como threads serão mapeados
    ◦ Windows NT modelo 1-1
    ◦ Solaris 2 modelo N-1 e M-n posteriormente




                              Prof. Adriano Teixeira de Souza
Prof. Adriano Teixeira de Souza
Prof. Adriano Teixeira de Souza

Sistemas Distribuídos - Multithreading

  • 1.
  • 2.
    Thread (lightweight process) é uma unidade básica de utilização da CPU, compreendendo um id, um contador de programa, registradores e pilha  Compartilha seção de código, seção de dados e outros recursos do SO pertencentes ao um mesmo processo Prof. Adriano Teixeira de Souza
  • 3.
    Capacidade de Resposta  Compartilhamento de Recursos  Economia na criação de processos  Uso de Arquiteturas Multiprocessador Prof. Adriano Teixeira de Souza
  • 4.
    Threads de Usuário ◦ Implementadas por bibliotecas  Threads de Kernel ◦ Suportadas diretamente pelo SO Prof. Adriano Teixeira de Souza
  • 5.
    A maioria das linguagens de programação não permite programação de atividades concorrentes  Normalmente as linguagens disponibilizam chamadas ao SO ◦ A biblioteca Win32 fornece um conjunto de APIs para efetuar multithreading em aplicações nativas Windows ◦ Pthreads fornece uma biblioteca para threads em sistemas POSIX, como linux ◦ C-threads no Mach ◦ Threads no Solaris Prof. Adriano Teixeira de Souza
  • 6.
    Historicamente a linguagem ADA (DoD) disponibilizou primitivas de concorrência porém a linguagem não popularizou-se no meio acadêmico e comercial  Java notavelmente é a única linguagem de uso geral e popular a disponibilizar as primitivas de concorrência para o programador de aplicativos (threads) ◦ Linguagens como C, C++ e Delphi fazem chamadas a primitivas de multithreading do SO  Todo programa java possui pelo menos um thread de controle ◦ main executa num thread na JVM Prof. Adriano Teixeira de Souza
  • 7.
    Explicitamente pode-se criar uma classe derivada da classe Thread, do package java.lang  É necessário redefinir o método run(), que realmente realiza o trabalho  O método start() cria efetivamente a thread ◦ Aloca memória e inicializa um novo thread na JVM ◦ Chama run() para tornar o thread passível de execução  Construtores: ◦ public Thread (String threadName) ◦ public Thread() Prof. Adriano Teixeira de Souza
  • 8.
    Alternativamente pode-se criar uma classe que implementa a interface Runnable public interface Runnable { public abstract void run(); }  Toda classe que implementa Runnable deve definir o método run() class Teste implements Runnable { public void run() { } } Prof. Adriano Teixeira de Souza
  • 9.
    start(): inicia a execução da thread (método run)  suspend(): suspende a execução da thread que está executando  sleep(): faz a thread que está executando dormir por um tempo determinado  yield(): faz a thread que está executando dormir por um tempo indeterminado  resume(): resume a execução de uma thread suspensa  stop(): termina a execução de uma thread; a thread não pode ser mais executada. Prof. Adriano Teixeira de Souza
  • 10.
    join(): método que espera o término da THREAD para qual foi enviada a mensagem para ser liberada.  interrupt(): método que interrompe a execução de uma THREAD.  interrupted(): método que testa se uma THREAD está ou não interrompida. Prof. Adriano Teixeira de Souza
  • 11.
    nascimento start pronto Notify Notifyall Conclusão E/S yeld Despachar (alocar Processador) Tempo expira wait Inicia E/S executando esperando bloqueado completo sleep adormecido morto morto Prof. Adriano Teixeira de Souza
  • 12.
    Além do programa multithread, outros threads executam assincronamente para a JVM ◦ Gerência de memória: coleta de lixo ◦ Eventos de temporização ◦ Controles gráficos Prof. Adriano Teixeira de Souza
  • 13.
    Tipicamente a JVM é implementada sobre um SO host, ocultando detalhes de implementação  Não indica como threads serão mapeados ◦ Windows NT modelo 1-1 ◦ Solaris 2 modelo N-1 e M-n posteriormente Prof. Adriano Teixeira de Souza
  • 14.
  • 15.