Khi sử dụng Lua như một ngôn ngữ nhúng trên cả phía máy khách lẫn máy chủ, người ta thường mong muốn tận dụng cơ chế đa luồng cho mã kịch bản Lua. Điều này đặc biệt cần thiết khi logic nghiệp vụ của bạn bao gồm nhiều luồng xử lý độc lập nhưng lại muốn chúng chạy chung trong cùng một máy ảo Lua.
Lua cung cấp sẵn coroutine - một công cụ mô phỏng đa luồng cực kỳ hiệu quả. Trên thực tế, chính Lua cũng gọi kiểu dữ liệu coroutine là “thread”. Trong quá trình xem xét lại cách đóng gói Lua trong Skynet gần đây, tôi nhận thấy một hạn chế quan trọng: luồng chính không được phép gọi các API chặn (blocking API). Nói cách khác, không thể yield trực tiếp trong mã xử lý chính. Điều này khiến tôi suy nghĩ về một phương pháp đóng gói tối ưu hơn, không chỉ giải quyết được hạn chế này mà còn đơn giản hóa nhiều phần mã nguồn liên quan.