我有一个通过串行端口实现特殊协议(protocol)的 C++ 代码。代码是多线程的,内部轮询串口并做自己的循环处理。我想从 erlang 调用这个驱动程序并接收来自这个驱动程序的事件。我担心的是这个 C++ 代码是多线程的,也是有状态的,这意味着当我在驱动程序上调用某个函数时,它会在内部缓存一些内容,这些内容将在驱动程序的后续调用中使用/需要。我的问题是
1.NIF是否与我的其他erlang进程在同一个操作系统进程中运行,或者NIF是否在单独的操作系统进程中启动?
2.用NIF扭曲这个多线程有状态的C++代码有意义吗?
4.如果 NIF 不是正确的方法,那么让 Elrang 与这段 C++ 代码来回交谈的更好方法是什么。我也更喜欢我的 C++ 代码与我的其他 Erlang 进程位于同一个 OS 进程中,因为看起来链接驱动程序是一种选择,但不确定我的 C++ 代码的多线程性质是否可以接受模型。另外,我听说他们会搞砸 elrang 调度程序?
请您参考如下方法:
说到 NIF 和驱动程序之间的区别,前者本身是同步的,而后者可以是异步的(如果您不想收到大多数命令的任何答案,这确实是一个巨大的优势)。驱动程序更容易搞砸,也更难实现(但一旦你掌握了主要模式和问题,它们实际上看起来还不错)。
对于司机来说,这是一个好的开始:
http://www.erlang.org/doc/apps/erts/driver.html
对于 NIF,类似的东西(看看复杂性的差异):
http://www.erlang.org/doc/tutorial/nif.html




