Fibra (ciência da computação) - Fiber (computer science)

Na ciência da computação , uma fibra é um segmento de execução particularmente leve .

Como threads, as fibras compartilham espaço de endereço . No entanto, as fibras usam multitarefa cooperativa, enquanto os threads usam multitarefa preemptiva . Freqüentemente, os threads dependem do agendador de threads do kernel para antecipar um thread ocupado e retomar outro thread; as fibras se rendem para executar outra fibra durante a execução.

Fibras e co-rotinas

As fibras descrevem essencialmente o mesmo conceito das co-rotinas . A diferença, se houver, é que as corrotinas são uma construção no nível da linguagem, uma forma de fluxo de controle , enquanto as fibras são uma construção no nível do sistema, vistas como threads que por acaso não funcionam em paralelo. É controverso qual dos dois conceitos tem prioridade: as fibras podem ser vistas como uma implementação de corrotinas ou como um substrato no qual implementar corrotinas.

Vantagens e desvantagens

Como as fibras realizam multitarefa cooperativamente, a segurança do thread é menos problemática do que com threads agendados preventivamente, e as construções de sincronização, incluindo spinlocks e operações atômicas, são desnecessárias ao escrever código com fibra, pois são sincronizados implicitamente. No entanto, muitas bibliotecas fornecem uma fibra implicitamente como um método de condução de E / S sem bloqueio ; como tal, é aconselhável alguma cautela e leitura da documentação. Uma desvantagem é que as fibras não podem utilizar máquinas multiprocessadoras sem também usar threads preemptivos; no entanto, um modelo de encadeamento M: N com não mais encadeamentos preemptivos do que núcleos de CPU pode ser mais eficiente do que fibras puras ou encadeamento preemptivo puro.

Em alguns programas de servidor, as fibras são usadas para bloquear-se suavemente para permitir que seus programas pai de thread único continuem funcionando. Neste projeto, as fibras são usadas principalmente para acesso de E / S que não precisa de processamento de CPU. Isso permite que o programa principal continue o que está fazendo. As fibras cedem o controle ao programa principal de thread único e, quando a operação de E / S é concluída, as fibras continuam de onde pararam.

Suporte para sistema operacional

É necessário menos suporte do sistema operacional para fibras do que para threads. Eles podem ser implementados em sistemas Unix modernos usando as funções de biblioteca getcontext, setcontext e swapcontext in ucontext.h , como em GNU Portable Threads , ou em assembler como boost.fiber .

No Microsoft Windows , as fibras são criadas usando as chamadas ConvertThreadToFiber e CreateFiber ; uma fibra que está suspensa no momento pode ser retomada em qualquer thread. O armazenamento local de fibra, análogo ao armazenamento local de segmento , pode ser usado para criar cópias exclusivas de variáveis.

O Symbian OS usou um conceito semelhante ao das fibras em seu Active Scheduler. Um objeto ativo continha uma fibra a ser executada pelo Agendador ativo quando uma das várias chamadas assíncronas pendentes fosse concluída. Vários objetos ativos podem estar aguardando para executar (com base na prioridade) e cada um teve que restringir seu próprio tempo de execução.

Exemplos de implementação de fibra

As fibras podem ser implementadas sem suporte do sistema operacional, embora alguns sistemas operacionais ou bibliotecas forneçam suporte explícito para elas.

Veja também

Referências

  1. ^ Uma classe de fibra
  2. ^ Shankar, Ajai (setembro de 2003). "Implementando corrotinas para .NET envolvendo a API de fibra não gerenciada" . MSDN Magazine . Microsoft. Arquivado do original em 19 de agosto de 2003 . Página visitada em 24 de dezembro de 2006 . Este artigo mostra como as corrotinas podem ser implementadas para o .NET Framework usando a API Fiber e Managed Extensions para C ++ e como elas podem ser facilmente usadas com outras linguagens compatíveis com .NET
  3. ^ Fibras , Biblioteca MSDN
  4. ^ CreateFiber, MSDN

links externos