8

我想用一种语言开始一个新的网络服务器项目,该语言支持通过纤程也就是协程又称为用户模式线程的并发性。确定我的选择到底是什么非常困难,因为术语“协程”似乎很松散地用于表示各种事物,而“纤维”几乎专门用于参考 Win32 API。

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

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

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

4

5 回答 5

6

greenlet扩展满足您在 Python 中的要求(常规,不是 Stackless)。

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

于 2010-01-02T06:25:44.867 回答
4

Lua 支持协程,见http://lua-users.org/wiki/CoroutinesTutorial,试试吧!

于 2009-12-24T03:04:13.087 回答
2

目前处于测试阶段的Tcl 8.6将支持协程。有关更多信息,请参阅Tcl Wiki 协程页面

于 2010-09-03T14:38:43.630 回答
1

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

于 2009-12-24T02:58:38.693 回答
1

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

有许多健壮的、广泛可用的 Scheme 实现,例如PLT SchemeChicken Scheme

于 2009-12-24T03:02:11.290 回答