首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Erlang-like线程替代或erl_nif性能

Erlang-like线程替代或erl_nif性能
EN

Stack Overflow用户
提问于 2012-11-20 18:00:35
回答 3查看 734关注 0票数 0

我很喜欢Erlang的线程架构(小的廉价线程和“无共享”架构),但似乎Erlang并不完全适合我的应用程序(这些东西在C/C++中性能会更好,而Erlang在这方面不是最好的)。

嗯,正如我已经说过的,我真的很喜欢Erlang的线程架构(它没有使用OS线程)。所以,我的问题是--有没有类似的库实现这个架构,以便在C/C++代码中使用?据我所知,在googles中,找不到比Java的“绿色线程”(很久以前就不推荐使用了,并已从当前版本中删除)和D的“纤程”(仅限于一个“真正”线程,而Erlang线程由Erlang在最合适的“真正”线程上执行)更好的东西,它们在某种程度上与Erlang线程相似,但没有Erlang线程强大。

如果没有这样的库,我正在考虑使用erl_nif接口在C/C++中编写所需的代码块。但是我在任何地方都找不到任何性能分析-- erl_nif是快速的,还是将Erlang术语/数据类型“转换”成C/C++类型的开销真的很大?

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-11-20 18:08:25

Akka提供了Erlang风格的角色,但它是针对Java/Scala的,而不是C/C++的。

根据我所读到的(例如http://www.scribd.com/doc/87376094/Erlang-and-OTP-in-Action#outer_page_324),NIF很快,但可能会导致整个Erlang程序崩溃,这是潜在的危险。您可以尝试使用Erlang端口(http://www.erlang.org/doc/reference_manual/ports.html)与C/C++通信,这样更安全,因为端口将非Erlang代码与Erlang监督树分开。

票数 2
EN

Stack Overflow用户

发布于 2012-11-20 18:10:18

你所追求的是所谓的“演员模型”

有相当多的C++库实现了它

  1. libcppa
  2. Actor-CPP
  3. Theron

哪一个更好完全取决于您的特定用例。

然而,请注意,与erlang的进程不同,中没有一个进程可以同时执行廉价线程和抢占式任务切换。您可以将参与者一对一地映射到worker OS线程,并具有抢占式切换,或者使用基于事件的参与者和协作多任务。

票数 2
EN

Stack Overflow用户

发布于 2012-11-20 20:14:45

erl_nif确实使用操作系统线程:

避免在NIF调用中做冗长的工作,因为这可能会降低VM的响应性。NIFs由执行调用Erlang代码的同一调度器线程直接调用。因此,调用调度器将被阻止进行任何其他工作,直到NIF返回。

所以看起来Akka可能是你最好的选择。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13470708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档