这更像是一个设计问题。
我正计划编写一些实现 CPU 密集型算法的 Web 服务。我要解决的问题是——python、perl 或 java 等高级语言使编写 Web 服务变得容易。虽然 C、C++ 等较低级别的语言可以微调代码的性能。
所以我在研究我能做些什么来桥接两种语言。这是我想出的选项:
特定于语言的绑定
使用 perl-xs 或 python 的 ctypes/loadlibrary 或 java 的 JNI 之类的东西。好处是我可以编写可以在同一进程中执行的扩展。在本地语言类型与 C 之间的转换和转换回来的开销很小。
实现一个单独的守护进程
使用 thrift / avro 之类的东西,并有一个单独的守护进程来运行 C/C++ 代码。好处是,它与高级语言松散耦合。我可以快速替换高级语言。缺点是序列化和本地 unix 域套接字的开销可能高于在相同地址空间中执行代码(由前一个选项提供)。
你们有什么感想?