Lua協程、GC垃圾回收機制以及如何調用C/C++函數


Lua 協程(coroutine)

線程和協同程序區別與聯繫

相同之處:Lua 協同程序(coroutine)與線程比較類似:擁有獨立的堆棧,獨立的局部變量,獨立的指令指針,同時又與其它協同程序共享全局變量和其它大部分東西。

不同之處:一個多線程程序可以同時運行幾個線程(併發執行、搶佔),而協程卻需要彼此協作地運行,並非真正的多線程,即一個多協程程序在同一時間只能運行一個協程,並且正在執行的協程只會在其顯式地要求掛起(suspend)時,它的執行纔會暫停(無搶佔、無併發)。注意:由於Lua中的協程無法在外部將其停止,而且有可能導致程序阻塞;


Lua GC垃圾回收機制

Lua 採用了自動內存管理。 這意味着你不用操心新創建的對象需要的內存如何分配出來, 也不用考慮在對象不再被使用後怎樣釋放它們所佔用的內存。

Lua 運行了一個垃圾收集器來收集所有死對象 (即在 Lua 中不可能再訪問到的對象)來完成自動內存管理的工作。 Lua 中所有用到的內存,如:字符串、表、用戶數據、函數、線程、 內部結構等,都服從自動管理。

Lua 實現了一個增量標記-掃描收集器。 它使用這兩個數字來控制垃圾收集循環: 垃圾收集器間歇率和垃圾收集器步進倍率。 這兩個數字都使用百分數爲單位 (例如:值 100 在內部表示 1 )。

垃圾收集器間歇率控制着收集器需要在開啓新的循環前要等待多久。 增大這個值會減少收集器的積極性。 當這個值比 100 小的時候,收集器在開啓新的循環前不會有等待。 設置這個值爲 200 就會讓收集器等到總內存使用量達到 之前的兩倍時纔開始新的循環。

垃圾收集器暫停時間
該數值被用於控制垃圾收集器

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章