支持光纤/协同程序的脚本语言?

时间:2009-12-24 02:55:07

标签: network-programming coroutine fiber

我想用一种语言来启动一个新的网络服务器项目,该语言通过光纤(也称为协同程序,即用户模式线程)来支持并发。确定我的选项究竟是什么一直非常困难,因为“coroutine”一词似乎用得很松散,意味着各种各样的东西,而“fiber”几乎只用于参考Win32 API。

出于这个问题的目的,协同程序/纤维:

  • 支持通过在嵌套函数内向调用函数生成结果来暂停执行的方法(即调用协程/光纤的调用堆栈中任意深度)
  • 支持将控制转移到当前执行点的另一个任意协程(即产生一个没有调用你的协程的协程)

我的语言选项是什么?我知道Ruby 1.9和Perl(Coro)都有支持,还有什么?任何具有成熟gc和动态方法调用的东西就足够了。

5 个答案:

答案 0 :(得分:6)

greenlet扩展符合您在Python中的要求(常规,而不是Stackless)。

Greenlet API有点低级,所以我建议使用gevent,它为您提供适合应用程序的API。 (免责声明:我写过gevent)

答案 1 :(得分:4)

Lua支持协同程序,请参阅http://lua-users.org/wiki/CoroutinesTutorial,试一试!

答案 2 :(得分:2)

目前处于测试阶段的

Tcl 8.6将支持协同程序。有关详细信息,请参阅the Tcl Wiki coroutine page

答案 3 :(得分:1)

Stackless Python是满足您要求的另一种选择。如果Python,Ruby和Perl都不适合您的目的(尽管都满足您的要求),您可能还有其他未说明的要求或偏好 - 小心拼出它们吗? - )

答案 4 :(得分:1)

Scheme具有call-with-current-continuation,这是一个构建块,可以在其上构建各种流控制。它绝对可以支持你提到的两种用途。

有许多强大且广泛可用的Scheme实现,例如PLT SchemeChicken Scheme