lua多執行緒lanes的測試

2021-10-20 18:20:06 字數 1494 閱讀 8153

**測試

因為原始的lua**不支援多執行緒,多數用的都是協程。這樣對於多工的,需要定時重新整理狀態的應用就不太理想。

為什麼不支援尼?

因為lua狀態機的維護是乙個全域性變數,這樣多執行緒會導致維護成本高。

lanes?

lanes是乙個支援lua多執行緒的開源庫,通過維護不同的lua狀態機實現多執行緒。執行緒間通訊使用linda物件。

github位址

這裡安裝不是大問題,安裝好後記得將bin目錄新增到環境變數中去。

mingw中需要新增msys的安裝。

有幾點需要注意:

安裝lua的版本需要是5.1版本

檢視makefile檔案我們看到有去查詢lua51和lua5.1的路徑,所以安裝好後需要將lua的路徑新增到環境變數中去。

lanes的介面實現實際上是指令碼呼叫動態lanes庫後進一步封裝實現的。都放在lanes.lua指令碼中。

編譯好後,在src目錄下建立乙個lanes_task.lua的檔案,將下面**copy到檔案中去,cmd執行 lua lanes_task.lua,這裡我嘗試過將編譯好的動態庫一出來,但是執行的時候老是載入失敗,暫時沒有找到原因。

local lanes = require "lanes"

lanes.

configure

--with_timers置為false之後才能執行sleep

local linda = lanes.

linda()

--可以看成是乙個訊息佇列

local

function

loop

( max)

for i =

1, max do

print

("sending: "

.. i)

linda:

send

("y"

, i)

-- linda as upvalue 傳送訊息

lanes.

sleep(1

)end

enda = lanes.

gen(

"*", loop)(10

)--建立task

while

true

dolocal key, val = linda:

receive

(4.0

,"y"

)-- timeout in seconds 接收訊息

if val ==

nilthen

print

("timed out"

,lanes.

now_secs()

)break

endprint

(tostring

( linda)

.." received: "

.. val)

end

Lua非搶占式多執行緒

當乙個協同正在執行時,不能在外部終止他。只能通過顯示的呼叫 yield 掛起他的執行。對於某些應用來說這個不存在問題,但有些應用對此是不能忍受的。不存在搶占式呼叫的程式是容易編寫的。不需要考慮同步帶來的 bugs,因為程式中的所有執行緒間的同步都是顯示的。你僅僅需要在協同 超出臨界區時呼叫 yiel...

JUnit測試多執行緒

單元測試是不支援多執行緒的,主線程結束之後,不管子執行緒有沒有結束,都會強制退出。但是我們可以通過控制主線程結束的時間來做多執行緒測試.在junit的 test方法中啟用多執行緒,新啟動的執行緒會隨著 test主線程的死亡而死亡!導致沒有任何輸出 解決方法 在 test方法中每建立乙個執行緒,就jo...

Junit 多執行緒測試

junit不能用來做多執行緒測試,因為junit不支援多執行緒。junit的testrunner的main方法原始碼 public static void main string args system.exit success exit catch exception e 從原始碼可以看出來,ju...