2010-09-04 7 views
7

A quel point est-il mauvais dans Lua 5.1 de ne jamais laisser une coroutine se terminer correctement? En d'autres termes, si une coroutine cède mais que je ne la reprends jamais, cela laisse-t-il beaucoup d'état qui traîne jusqu'à la fin du programme?Abandonner les coroutines

cor=coroutine.wrap(somefunc) 

while true do 
    done=cor() 
    if done then -- coroutine exited with "return true" 
     break 
    else -- coroutine yielded with "coroutine.yield(false)" 
     if some_condition then break end 
    end 
end 

function somefunc() 
    -- do something 
    coroutine.yield(false) 
    -- do some more 
    return true 
end 

Selon some_condition dans le pseudocode ci-dessus, la coroutine pourrait ne jamais être repris, et donc peut-être jamais correctement « fin ». Puis-je faire cela à des dizaines de coroutines sans avoir à m'inquiéter? Est-il prudent de laisser des corépondions dans cet état? Est-ce cher?

+4

Je ne sais pas du tout Lua, mais si je dans vos chaussures, je veux savoir le plus question: comment pouvez-vous déterminer si vous perdez de la mémoire (ou tout ce qui vous intéresse lorsque vous dites "cher")? S'il y a un outil, par exemple, vous pouvez vous-même répondre à la question de façon empirique. –

+0

Cela fonctionnerait pour évaluer l'élément de consommation de mémoire, mais je me demandais aussi si c'était sûr. C'est à dire. cela créerait-il plus tard des problèmes imprévus? – proFromDover

Répondre

17

Le garbage collector peut facilement déterminer que la coroutine est inaccessible et la recueillir. Je ne sais pas si des documents précisent que cela se produira, mais j'ai essayé la « méthode empirique »:

 
while true do 
    local cor = coroutine.wrap(function() coroutine.yield(false) end) 
    cor() 
end 

utilisation de la mémoire n'a pas augmenté au fil du temps.

Edit: Google dit:

There is no explicit operation for deleting a Lua coroutine; like any other value in Lua, coroutines are discarded by garbage collection. (Page 4 dans le PDF)

+0

Le PDF est génial, merci de le signaler. – proFromDover

Questions connexes