2010-09-04 9 views
7

Wie schlimm ist es in Lua 5.1, niemals eine Coroutine richtig enden zu lassen? Mit anderen Worten, wenn eine Coroutine nachgibt, aber ich sie nie wieder aufnehme, hinterläßt sie eine Menge Zustand bis zum Abschluß des Programms?Aufgeben von Korutinen

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 

Je nach some_condition in dem Pseudo-Code oben, könnte der Koroutine nie wieder aufgenommen werden, und damit vielleicht nie richtig „Ende“.

Könnte ich das zu Dutzenden von Korotinen tun, ohne sich Sorgen machen zu müssen? Ist es in diesem Zustand sicher, Coroutines zu verlassen? Ist es teuer?

+4

Ich weiß Lua überhaupt nicht, aber wenn ich an deiner Stelle wäre, würde ich das größere wissen wollen Frage: Wie können Sie feststellen, ob Sie Speicher verlieren (oder was immer Sie interessiert, wenn Sie "teuer" sagen)? Wenn es zum Beispiel ein Werkzeug gibt, können Sie die Frage selbst empirisch beantworten. –

+0

Das würde für die Bewertung des Speicherverbrauchs-Elements funktionieren, aber ich fragte mich auch, ob es sicher war. I.e. würde es später zu unvorhergesehenen Problemen führen? – proFromDover

Antwort

17

Der Garbage Collector kann leicht feststellen, dass die Coroutine nicht erreichbar ist und sie sammeln. Ich weiß nicht, ob einer der docs sagen, dass dies geschehen wird, aber ich versuchte, die „empirische Methode“:

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

Speichernutzung im Laufe der Zeit nicht wachsen.

Edit: Google sagt:

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

+0

Das PDF ist großartig, danke für den Hinweis. – proFromDover

Verwandte Themen