Lua学习笔记(五) —— 非抢先式的多线程

1、 概念

协同程序提供一种协作式的多线程。每个协同程序都等于是一个线程。一对yield-resume可以将执行权在不同线程之间切换。然而,协同程序与常规的多线程的不同之处在于,协同程序是非抢先式的。就是说,当一个协同程序在运行时,是无法从外部停止它的。只有当协同程序显示地要求挂起时(调用yield,它才会停止。对于有些应用而言,这没有问题,而对于另外一些应用则可能无法接受这种情况。当不存在抢先时,编程会简单许多。无需为同步的bug而抓狂,在程序中所有线程间的同步都是显式的,只需确保一个协同程序在它的临界区域之外调用yield即可

2、 在lua中打开链接下载文件的方法

a) 加载luaSocket库,require “socket”

b) 打开TCP链接  Socket.connect(host,80)   host即是网址

c) 发送文件请求

 Lua学习笔记(五) —— 非抢先式的多线程_第1张图片

d) 读取文件

 Lua学习笔记(五) —— 非抢先式的多线程_第2张图片

e) 关闭链接

c:close()

3、 多线程执行多下载任务

a) Connection:settimeout0)   ——使receive调用不会阻塞

4、 LuaSocketSelect函数可以用于等待一组socket的状态的改变,在等待时程序陷入阻塞状态

你可能感兴趣的:(Lua)