3

而我完全了解 Scala 和 Akka 演员,以及其他非标准 Scala 并发包,已经习惯了Gevent(它是 Python 的绿色线程 + 非阻塞 IO 框架/库,尚未获得与 NodeJS 和各种 Actor 框架之类的东西相比,我认为它值得关注)以及用它编写并发代码是多么容易——只需像使用“真实”线程一样编写代码,但不使用实际的 OS 线程,所以你可以有数千个,比如 Erlang 进程,所有现有代码都可以工作——我不得不说我目前并不太喜欢并发代码的相当有限(并且有点难以用“普通代码”组合)的方式使用 Akka 风格的 actor 时需要编写。

现在,有Kilim,它似乎正在做 Gevent 正在做的事情(除了它使用 CPS 转换而不是运行时堆栈操作);此外,众所周知,Scala 能够与 Java 完全互操作。然而,这种互操作性是否完全扩展到 Kilim 的运行级别?如果是,那么在实现 Scala 和 Kilim 的组合时要记住哪些关键事项?我通过谷歌搜索找到了一些资源(例如https://github.com/lllazu/kilim-scala),但没有明确或实质性的内容。

注意:我也对以下方面感兴趣:

  • 为什么这是一种通常不鼓励使用的方法(即我应该使用 Akka);
  • 我错了,Akka 风格的演员代码没有限制,或者限制不足以对(高级)代码风格产生任何重大影响;
4

1 回答 1

1

Feel free to have a comment on anything related

In C/C++ the most generic and least invasive approach to asynchronous execution seems to be the callbacks and I prefer to stay with the callbacks in order to be able to reuse the most libraries out there. With a bit of coroutine magick any callback-oriented library can be used imperatively, that is, for any method foo (callback (bar)) I can make a wrapper bar = foo (cbcoro) which can be used withing a normal imperative control flow (while doing context switching behind the scene).

I'm starting another project in Scala now and going to try to use the delimeted continuations in a similar way.

P.S. Bytecode instrumentation which works fine with the Java bytecode code can still fail with the Scala bytecode, I've seen this happen with db4o and DataNucleus, therefore you need a good support (or a very good knowledge of the tools in question) if you're going that way.

于 2013-09-25T16:23:47.187 回答