Fibers
9/8/2008
Uma fibra é uma unidade de execução que deve ser manualmente agendada, o aplicativo.
Fibers executar no contexto de segmentos que cronograma-los. Cada segmento pode cronograma múltiplo fibers.
Em geral, fibers não oferecem vantagens sobre uma aplicativo com vários segmentos bem estruturado. No entanto, usar fibers pode facilitar a porta aplicativos que foram criados para cronograma seus próprios segmentos.
Do ponto de vista de sistema, uma fibra assume a identidade do segmento que o criou. De exemplo, se uma fibra acessa segmento local armazenamento (TLS), ele está acessando o TLS do segmento que o criou. Além disso, se uma fibra chama a função ExitThread, o segmento que criou sai.
No entanto, uma fibra não possui todos o mesmo informações do estado associado com ela como que associado com um segmento.
O informações do estado somente mantida por uma fibra é sua pilha, um subconjunto de seus registros e os dados de fibra fornecidos durante a criação de fibra. Os registradores salvos são o conjunto de registros geralmente mantido pela chamar função.
Fibers não estão agendados preemptively. Você cronograma uma fibra alternando para ela a partir de fibra outra.
O sistema ainda agenda segmentos para executar. Quando um segmento execução fibers é precedido, sua execução fibra é precedido. De fibra é executado quando o segmento executa.
Antes de agendar a fibra primeira, chamar a função ConvertThreadToFiber para criar uma área para informações do estado de fibra salvar no. O segmento chamado torna-se de fibra em execução no momento. O informações do estado armazenados para esta fibra inclui os dados de fibra passados como um argumento para ConvertThreadToFiber.
A função CreateFiber é usada para criar uma nova fibra a partir de uma fibra existente.
O chamar tem a seguinte requisitos:
- Tamanho de pilha, definido como zero.
- O endereço inicial.
- Os dados de fibra.
O endereço inicial é geralmente um user-supplied função, a função de fibra, que utiliza um parâmetro, os dados de fibra e não retorna um valor chamado.
Se sua função de fibra retornar, o segmento execução sai de fibra.
Para executar qualquer fibra criada com CreateFiber, chamar a função SwitchToFiber.
Você pode chamar SwitchToFiber Com o endereço de uma fibra criada por um segmento diferente. Para isso, você deve ter o endereço retornado para o outro segmento quando ele chamado CreateFiber e você deve usar sincronização adequada.
Uma fibra pode recuperar os dados de fibra por chamado a macro GetFiberData. Uma fibra pode recuperar o endereço de fibra a qualquer momento por chamado a macro GetCurrentFiber.
Para limpar os dados associado com uma fibra, chamar a função DeleteFiber.
Tome cuidado quando chamado DeleteFiber: Se você chamar DeleteFiber Para uma fibra criada por outro segmento, você pode causar o outro segmento para finalizar de forma anormal.
Se DeleteFiber é chamado a partir de atualmente execução de fibra, suas chamadas segmento ExitThread.