Lua 加载屏幕 - 协程 vs C 线程

现在我使用与此处描述的类似方法来加载资源

http://www.lua.org/pil/9.4.html

步骤如下:

  • 读取文件1
  • 渲染
  • 读取文件2
  • 渲染
  • ...

优点:使用纯lua,简单。

缺点:它不是并发的,每个文件读取都会阻塞渲染,只有在完成渲染后才能进行下一个读取。另外,如果需要处理数据(例如从源代码创建着色器程序,或解码图片并创建纹理),则需要将其传递到C中并取回。

过去我使用C线程调用lua函数,然后他们加载文件。

优点:它是并发的。您可以在C++端处理加载的数据。

缺点:您需要将加载的数据传递回Lua

也许我在两者中做得不太好,并且有更好的使用Lua + C加载和处理数据的方法?

点赞
用户3080396
用户3080396

我将采取一个混合方法来实现,使用两种类型的线程:

  • 处理线程从消息队列中读取数据并进行实际的资源加载。
  • 加载线程以异步方式运行Lua脚本,通过入队请求来处理文件。

通过添加更多特定类型的线程,它可以相当不错地进行扩展。

当然,您应该通过对当前实现进行性能分析来确保它真的值得这样做。使用线程和消息队列会增加更多的C/C++代码。毕竟这只是一个加载屏幕 ;)

2014-06-11 12:24:12