協程resume()傳入的引數依據yield()的左值來決定,例如:
#!/usr/bin/lua
function foo(a)
print("foo function", a)
return coroutine.yield(2 * a)
endco = coroutine.create(function(a, b)
print("第一次協同執行輸出: ", a, b)
local r = foo(a + 1) --這裡resume需要傳入至少乙個引數
print("第二個協同掃行辦出: ", r)
local r, s = coroutine.yield(a + b, a - b)--這裡resume需要傳入至少兩個引數
print("第三個協執行輸出: ", r, s)
return b, "結束協同程式"
end)
print("main", coroutine.resume(co, 1, 10))
print("--分割線----")
print("main", coroutine.resume(co, 'r'))
print("--分割線----")
print("main", coroutine.resume(co, 'x', 'y'))
print("--分割線----")
print("main", coroutine.resume(co, "x", "y"))
print("--分割線----")
執行結果:
第一次協同執行輸出: 1 10
foo function2
maintrue 4
--分割線----
第二個協同掃行辦出: r
maintrue 11-9
--分割線----
第三個協執行輸出: x y
maintrue 10結束協同程式
--分割線----
mainfalse cannot resume dead coroutine
--分割線----
python協程使用 協程的案例
概念 使用者層面在乙個執行緒中進行多工切換的機制,比執行緒更加輕量級 實現併發量更大 協程的使用 使用第三方庫 gevent gevent 是乙個基於協程的 python 網路庫,在遇到 io 阻塞時,程式會自動進行切換,可以讓我們用同步的放肆寫非同步 io 協程的使用 from gevent im...
什麼是協程?協程的優缺點
協程 協程是微執行緒,纖程,本質是乙個單執行緒 協程能在單執行緒處理高併發,因為遇到 i o 自動切換,執行緒遇到 i o 操作會等待 阻塞。協程的優缺點 缺點 缺點是無法利用多核資源,本質是單核的,它不能同時將單個cpu的多個核用上,協程需要和程序配合才能執行在多cpu上。優點 不僅是處理高併發 ...
關於協程 nodejs和golang協程的不同
nodejs和golang都是支援協程的,從表現上來看,nodejs對於協程的支援在於async await,golang對協程的支援在於goroutine。關於協程的話題,簡單來說,可以看作是非搶占式的輕量級執行緒。一句話概括,上面提到了 可以看作是非搶占式的輕量級執行緒 在多執行緒中,把一段 放...