協(xié)同程序與常規(guī)的多線程不同之處:協(xié)同程序是非搶占式的。
當(dāng)一個協(xié)同程序運行時,是無法從外部停止它的。只有當(dāng)協(xié)同程序顯式地調(diào)用yield時,它才會停止。
當(dāng)不存在搶先時,編程會變得簡單很多,無須為同步的bug抓狂。
在程序中所有的同步都是顯式的,只需要確保一個協(xié)同程序在它的臨界區(qū)域之外調(diào)用yield即可。
對于這樣非搶占式的多線程來說,只要有一個線程調(diào)用了一個阻塞操作,整個程序在該操作完成前,都會停止下來。
下面用一個有趣的方法來解決這個問題:通過HTTP下載幾個遠程文件。
下面的例子測試下載lua源代碼,其中會用到LuaSocket模塊:
local socket = require "socket"local host = "www.lua.org"local file1 = "/ftp/lua-5.3.3.tar.gz&