índice
(1) O que é uma co-rotina (retirado do tutorial para iniciantes)
(2) A diferença com tópicos (retirado do tutorial de iniciante)
(3) Método (retirado do tutorial do novato)
1. Introdução ao blog
Como uma das notas de estudo da Lua, este artigo registra os pontos de conhecimento relevantes sobre as corrotinas da Lua. O conteúdo deste artigo será muito simples.É apenas um estudo de nível inicial para aqueles que não conhecem o conhecimento das corrotinas. quiser ir mais fundo, pode pular.
2. Conteúdo
(1) O que é uma co-rotina (retirado do tutorial para iniciantes)
Ele tem uma pilha independente, variáveis locais independentes, ponteiros de instrução independentes e, ao mesmo tempo, compartilha variáveis globais e muitas outras coisas com outros programas cooperativos.
(2) A diferença com tópicos (retirado do tutorial de iniciante)
Um programa com vários threads pode executar vários threads ao mesmo tempo, mas os programas cooperativos precisam ser executados em cooperação uns com os outros. Apenas um programa cooperativo está sendo executado em um determinado momento, e esse programa cooperativo em execução só será suspenso quando for explicitamente necessário para ser suspenso. As co-rotinas são um pouco semelhantes ao multithreading sincronizado e vários threads que aguardam o mesmo bloqueio de thread são um pouco semelhantes à colaboração.
(3) Método (retirado do tutorial do novato)
método | Descrição |
---|---|
coroutine.create () | Criar co-rotina, retornar co-rotina, o parâmetro é uma função, quando usado em conjunto com resume, a chamada de função será ativada |
coroutine.resume () | Reinicie a co-rotina e use-a com criar |
coroutine.yield () | Suspender a co-rotina, definir a co-rotina para o estado suspenso, isso pode ter muitos efeitos úteis quando usado em conjunto com a retomada |
coroutine.status () | Verifique o status da co-rotina. Nota: Existem três status da co-rotina: morta, suspensa e em execução. Consulte o programa a seguir para saber quando há tal status |
coroutine.wrap () | Crie uma co-rotina, retorne uma função, uma vez que você chamar esta função, entre na co-rotina e repita a função de criação |
coroutine.running () | Retorne a co-rotina em execução. Uma co-rotina é uma rosca. Quando a execução é usada, ela retorna um número de rosca corretiva. |
(4) Uso específico
Podemos criar uma co-rotina através de create. O parâmetro de create é uma função. Create retorna um thread. Podemos chamar esse thread por resume para executar a corrotina que criamos por meio de create, conforme mostrado no código a seguir:
--创建
local co = coroutine.create(function()
print("我被调用了")
end)
--启动
coroutine.resume(co)
-----------------------------------输出
我被调用了
Quando uma co-rotina está em execução, não há como pará-la por fora. Somente cedendo dentro da co-rotina a co-rotina pode ser suspensa, ou chamada de suspensão, conforme mostrado no código a seguir:
--创建
local co = coroutine.create(function()
for i=1,10 do
print("输出:"..i)
if i == 5 then
coroutine.yield()
end
end
end)
--启动
coroutine.resume(co)
-----------------------------------输出
输出:1
输出:2
输出:3
输出:4
输出:5
Ao mesmo tempo, quando uma co-rotina é suspensa, podemos continuar a executar o conteúdo subsequente da co-rotina chamando o thread novamente por meio de resume. O código é o seguinte:
--创建
local co = coroutine.create(function()
for i=1,10 do
print("输出:"..i)
if i == 5 then
coroutine.yield()
end
end
end)
--启动
coroutine.resume(co)
----------被挂起后继续执行
--恢复
coroutine.resume(co)
-----------------------------------输出
输出:1
输出:2
输出:3
输出:4
输出:5
输出:6
输出:7
输出:8
输出:9
输出:10
O texto acima é basicamente todo o conteúdo da co-rotina. Vamos falar sobre o método wrap. O método wrap é semelhante a create. Ele também cria uma co-rotina. A diferença de create é que wrap retorna não um thread, mas uma função em si, que é criado por wrap. Para a co-rotina, não chamamos mais e retomamos por meio de resume, mas implementamos diretamente suspender e retomar chamando a própria função retornada. O código é o seguinte:
--创建
local co = coroutine.wrap(function()
for i=1,10 do
print("输出:"..i)
if i == 5 then
coroutine.yield()
end
end
end)
--调用 ---------将在输出五次后被挂起
co()
print("----------------------:被挂起")
--恢复
co()
-- -----------------------------------输出
输出:1
输出:2
输出:3
输出:4
输出:5
----------------------:被挂起
输出:6
输出:7
输出:8
输出:9
3. Empurre
Github :https://github.com/KingSun5
4. Conclusão
Se você acha que o artigo do blogger está bem escrito, você pode querer prestar atenção nele e gostar da postagem do blog. Além disso, a capacidade do blogger é limitada. Se houver algum erro no artigo, comente e critique .
Grupo de troca QQ: 806091680 (Chinar)
Este grupo foi criado pelo blogueiro da CSDN Chinar, recomendo! Eu também estou no grupo!
Este artigo é um artigo original, por favor, reimprima a fonte do famoso autor e mantenha-se no topo! ! ! !