SO中文参考
首页
(current)
程序语言
c
java
python
c++
go
javascript
swift
c#
操作系统
linux
ubuntu
centos
unix
数据库
oracle
mysql
mongodb
postgresql
框架
node.js
angular
react-native
avalon
django
twisted
hadoop
.net
移动开发
android
ios
搜索
无栈Python的微线程在游戏状态机实现上比Lua的协程有什么优势?
问题描述
投票:0
回答:1
无栈Python实现比Lua协程有什么优势吗? 他们有什么区别?
python
lua
coroutine
stackless
python-stackless
1个回答
10
投票
无堆栈Python和tasklet
(我还没有使用 Stackless Python 进行过任何编程,但我已经阅读了一些有关它如何实现的详细信息):
优点:
大多数时候都是轻量级的。
有调度程序来管理当前任务产生后下一个恢复哪个任务。
支持抢占式调度。 (即运行 X 指令)
tasklet 之间的通信通道。
缺点:
从 tasklet 中生成时有时需要 C 堆栈。 (即当从某些 C 回调中产生时)
带有普通协程的 Lua 5.1:
优点:
轻量级。
resume()/yield() 函数允许消费者/生产者模型的通信。
缺点:
没有内置调度程序。您必须管理恢复和产生协程。
无法从 C 函数、元方法或迭代器中产生。 (Lua 5.2 将消除大部分限制,LuaJIT 1.1 提供轻量级的 c 堆栈切换以从任何地方进行收益)
没有内置的抢占式调度支持。 (必须使用调试挂钩)
Lua 5.1 与
ConcurrentLua
:
优点:
轻量级。
具有协作上下文切换的调度程序。
具有 Erlang 风格的任务之间的消息传递通信。
支持节点之间透明的分布式消息传递。
缺点:
无法从 C 函数、元方法或迭代器中产生。 (同样,大部分限制在 Lua 5.2 和 LuaJIT 中消失)
没有内置的抢占式调度支持。 (必须使用调试挂钩)
LuaJIT 2.0 Beta 与
ConcurrentLua
:
优点:
轻量级。
具有协作上下文切换的调度程序。
具有 Erlang 风格的任务之间的消息传递通信。
支持节点之间透明的分布式消息传递。
非常快的 JIT 支持使得
Lua 比 Python 快得多
缺点:
现在可能无法从 C 函数中产生。这可能会在未来的版本中得到支持。
没有内置的抢占式调度支持。 (必须使用调试挂钩)
最新问题
“dotnet ef”命令在 .NET Core 2.2 中不起作用
当我运行且相机在 Roblox Studio 中编写脚本时,部分会被删除
隐藏页面中的 FullCalendar SchedulerLicenseKey
根据另一个表的结果从一个表中选择计数
Python 子进程仅在 cron 中返回非零退出状态
ActiveMQ XStream ForbiddenClassException
在 MacOS Sequoia 上挂载 Windows 共享
ProcessError:警告:无法删除_next/static/.../:权限被拒绝
在浏览器中将图像从 PHP 导入到 PDFKit 时出现问题 - fs.readFileSync 不是函数
将 null 设置为输入字段的空字符串值
'错误:应指定插件名称'@svgr/webpack svgoConfig
如何在Cartopy中应用具有极地立体投影的地球特征和陆地/海洋掩模?
严格两相锁定示例
Firebase Analytics logEvent 异步运行
当refit=True时,为什么要在RandomizedSearchCV之后进行额外的拟合?
通过子字符串列表过滤DataFrame
在docker中使用buildkit并运行--mount,为什么cabal install下载缓存的包?
在分离器中读取多个帧
为什么 tls.Client 失败并显示消息:第一条记录看起来不像 TLS 握手
大师冥想错误:ESP32 上的 Core 1 Panic'ed(禁止加载)
© www.soinside.com 2019 - 2024. All rights reserved.