我很喜欢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++类型的开销真的很大?
谢谢!
发布于 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监督树分开。
发布于 2012-11-20 18:10:18
你所追求的是所谓的“演员模型”
有相当多的C++库实现了它
哪一个更好完全取决于您的特定用例。
然而,请注意,与erlang的进程不同,中没有一个进程可以同时执行廉价线程和抢占式任务切换。您可以将参与者一对一地映射到worker OS线程,并具有抢占式切换,或者使用基于事件的参与者和协作多任务。
发布于 2012-11-20 20:14:45
erl_nif确实使用操作系统线程:
避免在NIF调用中做冗长的工作,因为这可能会降低VM的响应性。NIFs由执行调用Erlang代码的同一调度器线程直接调用。因此,调用调度器将被阻止进行任何其他工作,直到NIF返回。
所以看起来Akka可能是你最好的选择。
https://stackoverflow.com/questions/13470708
复制相似问题