Kilim 与 Scala:它是否可能像 Scala 并发"standard"接近一样成熟?



虽然我完全了解 Scala 和 Akka actor,以及 Scala 的其他非 stdlib 并发包,已经习惯了 Gevent(它是一个绿色线程 + Python 的非阻塞 IO 框架/库,与 NodeJS 和各种 Actor 框架相比,我认为它没有得到应有的关注(以及使用它编写并发代码是多么容易——只是像使用"真实"线程一样编写代码,但没有实际使用操作系统线程,因此您可以拥有数千个线程,例如 Erlang 进程和所有现有的代码 Just Works — 我不得不说,我目前不太喜欢在使用 Akka 风格的参与者时需要编写并发代码的相当有限的(并且有点难以用"普通代码"编写(方式。

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

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

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

随时对任何相关内容发表评论

在 C/C++ 中,异步执行的最通用和侵入性最小的方法似乎是回调,我更喜欢保留回调,以便能够重用最多的库。通过一些协程魔术,任何面向回调的库都可以命令式使用,也就是说,对于任何方法foo (callback (bar))我可以制作一个包装器bar = foo (cbcoro)它可以与正常的命令式控制流一起使用(同时在幕后进行上下文切换(。

我现在正在 Scala 中启动另一个项目,并尝试以类似的方式使用去石灰的延续。

附言:与Java字节码代码一起工作的字节码检测仍然可以在Scala字节码上失败,我已经看到db4o和DataNucleus会发生这种情况,因此如果你要这样做,你需要一个很好的支持(或对相关工具的很好的了解(。

最新更新