2

我在lua中做一些并行操作。一线程接收,一线程处理,一线程再次发送。为了在线程之间传递数据,我一直在使用表。

可悲的是,现在我需要传递多个变量。如何创建“多值表”(每个键可以有多个值的表)而不会对性能产生太大影响,还有比使用表更有效的方法吗?

到目前为止的简化代码:

sendQueue = {}
processQueue = {}

function recieveLoop()
    while true do
        Wait For recieve
        table.insert(processQueue, recievedText)
    end
end

function processLoop(sender, text, raw)
    while true do
        for key,value in pairs(processQueue) do
            processData
            table.insert(recieveQueue, raw)
        end
    end
end

然后对于 receiveLoop 也一样

所有这 3 个函数都是线程化的,并且彼此独立运行。

4

2 回答 2

7

表可以包含其他表,因此您可以在每条消息中存储任意数量的变量。

代替:

table.insert(queue, datum1)

你可以有:

local message = {datum1, datum2}
table.insert(queue, message)

或者简单地说:

table.insert(queue, {datum1, datum2})

包括尽可能多的“部分”到消息中。在接收端,您可以通过索引来参考消息部分:

print('foo:', message[1], 'bar:', message[2])

或者解压元素:

local foo, bar = unpack(message) -- this is `table.unpack` in Lua 5.2
print('foo:', foo, 'bar:', bar)

或者您可以在消息中使用命名字段:

local message = {
      foo = datam1,
      bar = datum2,
}
table.insert(queue, message)

等等等等。

于 2012-05-16T23:18:48.943 回答
0

Lua 唯一真正的数据结构类型是 table,所以你真的别无选择,不使用 userdata (C)。但是,表可以是表的键或值。也就是嵌套。这就是您获得多个值的方式。

于 2012-08-03T23:18:58.690 回答