×
Namespaces

Variants
Actions

Objetos Ativos x Thread

From Nokia Developer Wiki
Jump to: navigation, search
Article Metadata

Artigo
Tradução:
Por TK2000
Última alteração feita por hamishwillee em 13 Sep 2012


Contents

Introdução

O Symbian OS é um sistema operacional altamente assíncrono. Virtualmente todos os serviços do sistema são providenciados através de servidores (servers), cada qual operam em seu próprio processo para manter uma confiabilidade elevada.

Fornecimento de APIs de serviço, normalmente em versões assíncronas e sicronas de suas funções disponíveis para as aplicações cliente, mas para envitar o bloqueio da UI da aplicação você deverá utilizar geralmente a versão assíncrona. A maioria das operações de consumo de tempo são feitas por chamada a algum servidor de serviço assíncrono, como o sistema de arquivos. A função de pedido do serviço retorna imediatamente, enquanto o pedido é processado em segundo plano. Isto significa que o programa precisa receber alguma notificação no futuro de que o pedido está completo, ao mesmo tempo necessita continuar executando outras tarefas, como responder as entradas do usuário ou atualizar a tela.

Geralmente, esta é uma prática popular para usar multiplas 'threads' e um sistema preempitivo: uma nova theread é iniciada para assegura cada tarefa assíncrona, fazendo o pedido e esperando uma notificação de conclusão para que o provedor de pedidos veja se a solicitação já está completada. Embora esta aproximação seja possível no Symbian OS, é ineficiente e fortemente desencorajada.

Outra aproximação seria o uso de Objetos Ativos, por favor consulte Active Objects para um entendimento completo sobre Objetos Ativos com exemplos.


Diferenças entre Objetos Ativos e Thread:

Objetos Ativos multitarefa cooperam com uma thread e, uma vez observando/acompanhado um evento, um objeto ativo não pode ser limpo/encerrado por uma tarefa ativa no qual ele está rodando. Em outra mão, threads' no Symbian OS são tarefas que podem ser encerradas pelo o processo na qual rodam.

Consequentemente, os dados compartilhados por threads devem ser protegidos com primitivos de sincronização do acesso tais como mutexes ou semaphores, ao contrário dos objetos ativos onde nenhuma sincronização é necessária.


Quando usar Thread:

São raras as ocasiões onde o uso de threads são necessários, como executar uma tarefa onde esta não possa ser dividida em incrementos curtos de funcionamento. Implementando isto em uma thread separada, este pode executar assíncrono sem impactar em uma resposta de eventos da UI de uma aplicação.


Vantagens dos Objetos Ativos sobre as Threads:

1) Eles podem rodar em uma mesma thread', isto gera uma baixa sobrecarga do que threads, quando é feito a mudança entre várias threads.

2) Sem a necessidade de sigronização de dados.

3) No Symbian OS, o uso de Objetos Ativos para 'escuta' de eventos multitarefas é ideal pois eles foram projetados para ter desempenho.

4) Threads aumenta o consumo de memória assim cada thread terá sua própria alocação de pilha.

5) O ambiente de troca entre threads é mais lento do que a troca entre Objetos ativos em um laço (loop) de uma tafera ativa.


Simples exemplo para uma Thread:

// Name of the new thread
 
_LIT(KThreadName, "MyFirstThread");
 
// Creates a thread belonging to the current process
// and opens this handle to that thread.
 
TInt res = iThread.Create( KThreadName, ThreadEntryPoint, KDefaultStackSize,
NULL, &iVariable);
 
// Makes the thread eligible for execution. After a thread is created,
// it is put into a suspended state; the thread is not eligible to
// run until Resume() is called.
 
iThread.Resume();
 
// Control passes to this function when the thread is first resumed,
// i.e. when the thread is initially scheduled to run
// It just changes the value of the variable.
 
TInt CThreadExampleAppUi::ThreadEntryPoint(TAny* param)
{
 
TInt* para = static_cast<TInt *>(param);
*para = 1;
return 1;
 
}

Symbian OS é otimizado para aplicações de processos simples (single-threaded applications), o uso de Objetos Ativos é preferencial ao invés de várias threads (multi-threading). Como regra geral, você deve sempre usar single-threading nos programas para Symbian OS, a menos que você soiba exatamente porque não fazer assim.

This page was last modified on 13 September 2012, at 09:20.
48 page views in the last 30 days.
×