quinta-feira, 23 de setembro de 2010

Threading(System. Threading)

  • Definição: Fazer uma coisa enquanto espara a outra ficar pronta
  • Threads simples
    • Propriedades
      • isAlive:Verifica a execução da thread
      • isBackground:Verifica ou atribui a thread para background
      • isThreadPollThread: Verifica se a thread faz parte de um pool de threads
      • managedThreadId: Recupera o numero q identifica a query
      • name: Recupera ou associa um nome a thread
      • priority: Recupera ou associa uma priorida a thread
      • threadState: Recupera o estado da thread
    • Metodos
      • abort: Dispara uma excecao para interromper a execução da thread
      • interrupt: Dispara uma exceção quando a thread está bloqueada. (threadState.WaitJoinSleep)
      • join: Bloqueia a chamada da Thread até q ela termine
      • Resume:Não utilizar
      • Start: Agenda a execução de uma thread
      • Suspend: Não Utilizar
    • Propriedades (Statics)
      • currentContext: Recupera o threadContext relacionado a thread
      • currentthread: Recupera a thread atual.
    • Métodos (Statics)
      • beginCriticalRegion: Regiao delimitada nao pode ser abortada serguramente.
      • endCriticalRegion: Indica o final de uma região critica
      • getDomain: Recupera o appDomain da thread
      • getDomanId: Recupera um identificador único para aquela appDomain
      • resetAbort: Cancela uma chamada do abort
      • sleep: Bloqueia uma thread por um certo número de iterações
      • volatileRead: Le a última versão do valor de um campo indiferente do processador que o escreveu
      • votatileWrite: Escreve o valor do campo imediatamente
    • threadStateEnumeration
      • aborted: Parou
      • abortRequest: Pediu pra parar, mas ainda nao parou
      • background: Esta rodando em background
      • running: começou
      • stopped: parou
      • stoppedRequest: pediu pra parar
      • suspended: Suspenso. Suporta voltar ou continuar
      • suspendedRequest: Pediu pra suspender. Suporta voltar ou continuar
      • Unstarted: Criou mas ainda não usou
      • waitSleepJoin: Bloqueada a pedido de algum método
    • Criação de Thread Simples
      • Função que o Thread vai executar
      • Objeto do tipo ThradStart, como parâmetro vai a função
      • Objeto do tipo thread, como parâmetro vai o threadStart
    • Thread Múltiplos
      • Do mesmo modo que as simples
    • threadJoin
      • Após iniciado o join faz com que elas aguardem a execução das outras pra proceguir
    • Prioridade da threads
      • Nesta Ordem
        • Highest
        • Above normal
        • Normal
        • Below Normal
        • Lowets
    • Passando dados para uma thread
      • Utiliza-se o ParametrizedStartThread no lugar do startThread que é igual ao outro só que o método que será executado, recebe parâmetros que são passados no método Start.
    • Parando as Threads
      • Utiliza-se o thread.Abort. Atenção para o local onde a thread  nome para as inconsistências. Estes locais são chamados regiões criticas.
    • Compartilhando informações
      • No momento e que as threads estão rodando dependendo do processador alguns valores resultandes das threads podem passar em branco. Para isso faremos uso do Interlocked. Observar que esta classe comente é usada em operações aritimeticas
      • Interlocked
        • add: faz a adição de dois números
        • exchange:Troca dois valores de uma operação
        • increment: adiciona 1 ao valor da operação atômica
        • read: Le um valor de uma operação atômica
      • SincronizationLocks
        • Sincroniza o acesso a objetos, para não haver mistura nos dados
        • enter: Cria uma transação de segurança para um objeto especifico
        • exit: Libera a trava
        • tryEnter: tenta criar mas tem u tempo de timeout
        • wait
      • DeadLocks
        • É o caso em que dois pedaços de código tantam acessar o mesmo objeto se anulando
      • Outros métodos de sincronização
        • readerWriterLock: Trava para a escrita e não para a leitura
        • mutex: Sincronizacao através do appDomain
        • semaphore: barra o acesso a recurso e cria algumas threads
        • event: Notifica ás threads que um evento ocorreu
    • Programação Assíncrona
      • Significa autorizar partes do código a rodar em threads diferentes
      • Todos os métodos que utilizam os modelo BeginXXX, EndXX, funcionam como threads assíncronas
      • Modelos de utilização
        • Wait-Until-Done: Inicia o método assincrono e vai fazer outra coisa. Esta outra coisa fica bloqueada ateh o q estiver fazendo tiver terminado.
        • Poolling: Igual ao anterior porem existe um código que testa se a outra atividade já terminou
        • CallBack: Nesse caso um método e especificado para ser executado quando o método parar de executar
        • Execoes e APM
          • As exceções somente são executas depos de todo o trecho BeginXXX EndXXX terem sido executados
        • Usando o pool de Threads
          • São threads já prontas e recomendadas pelo framework
          • Métodos
            • getAvaiableThreads:Numero de threads disposnivel para serem utilizadas no pool
            • getMaxThreads:Numero Maximo de threads suportados pelo pool
            • getMinThreads: Numero mínimo de threads criados a qquer momento
            • queueUserWorkItem: Adiciona u trabalho ao pool para ser executado a qquer momento
            • registerWaitForSingleObject: Permite que o callback possa ser associado a um WaitHandle, quando este handle está sinalaizado
            • setMaxThread: Associa o numero maximo de thread desse pool
            • setMixThread: Associa o numero mínimo de thread desse pool
            • unsafeQueueNativeOverlapped:  Trabalha com IO de arquivos
            • unsafeQueueUserWorkItem: Enfilera um trabalho para threads de alta performance. Não propaga essa execução para uma thread seguinte
            • unsafeRegisterWaitForSingleObject: Usado para associar um CallBack a um Processo WaitHandle.
          • Motivos para se altarar o numero de Thread no pool
            • Quando o numero de trabalhos no pool é muito grande
            • Aumentando-se o numero mínimo inicial de threads aumenta-se a perfomance.
        • SychronizationContext
          • Serve pra ser utilizado em diferentes ambientes

Nenhum comentário:

Postar um comentário