协同程序与常规的多线程不同之处:协同程序是非抢占式的。
当一个协同程序运行时,是无法从外部停止它的。只有当协同程序显式地调用yield时,它才会停止。
当不存在抢先时,编程会变得简单很多,无须为同步的bug抓狂。
在程序中所有的同步都是显式的,只需要确保一个协同程序在它的临界区域之外调用yield即可。
对于这样非抢占式的多线程来说,只要有一个线程调用了一个阻塞操作,整个程序在该操作完成前,都会停止下来。
下面用一个有趣的方法来解决这个问题:通过HTTP下载几个远程文件。
下面的例子测试下载lua源代码,其中会用到LuaSocket模块:
local socket = require "socket"local host = "www.lua.org"local file1 = "/ftp/lua-5.3.3.tar.gz&

