协同程序与常规的多线程不同之处:协同程序是非抢占式的。

当一个协同程序运行时,是无法从外部停止它的。只有当协同程序显式地调用yield时,它才会停止。

当不存在抢先时,编程会变得简单很多,无须为同步的bug抓狂。

在程序中所有的同步都是显式的,只需要确保一个协同程序在它的临界区域之外调用yield即可。

对于这样非抢占式的多线程来说,只要有一个线程调用了一个阻塞操作,整个程序在该操作完成前,都会停止下来。

下面用一个有趣的方法来解决这个问题:通过HTTP下载几个远程文件。

下面的例子测试下载lua源代码,其中会用到LuaSocket模块:

iOS培训,Swift培训,苹果开发培训,移动开发培训

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