Corrotina de notas de estudo de Lua (corrotina)

índice

1. Introdução ao blog

2. Conteúdo

(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)

(4) Uso específico

3. Empurre

4. Conclusão


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! ! ! !

Acho que você gosta

Origin blog.csdn.net/Mr_Sun88/article/details/105877427
Recomendado
Clasificación