協(xié)同程序與常規(guī)的多線程不同之處:協(xié)同程序是非搶占式的。

當(dāng)一個(gè)協(xié)同程序運(yùn)行時(shí),是無法從外部停止它的。只有當(dāng)協(xié)同程序顯式地調(diào)用yield時(shí),它才會(huì)停止。

當(dāng)不存在搶先時(shí),編程會(huì)變得簡單很多,無須為同步的bug抓狂。

在程序中所有的同步都是顯式的,只需要確保一個(gè)協(xié)同程序在它的臨界區(qū)域之外調(diào)用yield即可。

對于這樣非搶占式的多線程來說,只要有一個(gè)線程調(diào)用了一個(gè)阻塞操作,整個(gè)程序在該操作完成前,都會(huì)停止下來。

下面用一個(gè)有趣的方法來解決這個(gè)問題:通過HTTP下載幾個(gè)遠(yuǎn)程文件。

下面的例子測試下載lua源代碼,其中會(huì)用到LuaSocket模塊:

iOS培訓(xùn),Swift培訓(xùn),蘋果開發(fā)培訓(xùn),移動(dòng)開發(fā)培訓(xùn)

local socket = require "socket"local host = "www.lua.org"local file1 = "/ftp/lua-5.3.3.tar.gz&
        
		

網(wǎng)友評論