**測試
因為原始的lua**不支援多執行緒,多數用的都是協程。這樣對於多工的,需要定時重新整理狀態的應用就不太理想。github位址為什麼不支援尼?
因為lua狀態機的維護是乙個全域性變數,這樣多執行緒會導致維護成本高。
lanes?
lanes是乙個支援lua多執行緒的開源庫,通過維護不同的lua狀態機實現多執行緒。執行緒間通訊使用linda物件。
這裡安裝不是大問題,安裝好後記得將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...