gpt4 book ai didi

multithreading - Lua::如何编写将加载多个 CPU 的简单程序?

转载 作者:行者123 更新时间:2023-12-04 01:43:08 25 4
gpt4 key购买 nike

我无法在 Lua 中编写一个可以加载多个 CPU 的程序。自从 Lua supports the concept via coroutines ,我相信这是可以实现的。

我失败的原因可能是以下之一:

  • 在 Lua 中是不可能的
  • 我写不出来☺(我希望是这样)

  • 更有经验的人(我两周前发现了 Lua)能给我指出正确的方向吗?

    The point is to write a number-crunching script that does hi-load on ALL cores...
    为了演示 Lua 的力量。

    谢谢...

    最佳答案

    Lua 协程与操作系统意义上的线程不同。

    操作系统线程是抢占式的。这意味着它们将在任意时间运行,窃取操作系统规定的时间片。如果可用,它们将在不同的处理器上运行。他们可以在可能的情况下同时运行。

    Lua 协程不这样做。协程可能具有“线程”类型,但一次只能有一个协程处于事件状态。协程将一直运行,直到协程本身通过发出 coroutine.yield 决定停止运行。命令。一旦它产生,它不会再次运行,直到另一个例程发出 coroutine.resume命令到那个特定的协程。

    Lua 协程提供协作多线程,这就是为什么它们被称为 合作 例行公事。他们相互合作。一次只运行一件事,并且只有在任务明确要求时才切换任务。

    您可能认为您可以创建操作系统线程,在 Lua 中创建一些协程,然后在不同的操作系统线程中恢复每个协程。只要每个 OS 线程都在不同的 Lua 实例中执行代码,这就会起作用。 Lua API 是可重入的;您可以从不同的操作系统线程调用它,但前提是从不同的 Lua 实例调用。如果您尝试通过同一个 Lua 实例进行多线程处理,Lua 可能会做一些不愉快的事情。

    现有的所有 Lua 线程模块都会为每个线程创建备用 Lua 实例。 Lua-lltreads只需为每个线程创建一个全新的 Lua 实例;除了复制传递给新线程的参数之外,没有用于线程间通信的 API。 LuaLanes确实提供了一些交叉连接代码。

    关于multithreading - Lua::如何编写将加载多个 CPU 的简单程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6386717/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com