我正在开发一个web应用程序,但我需要调用某些专有的C++库函数。正如我所理解的,本机方法不是线程安全的,因此本机代码中的访问冲突可能会导致应用程序服务器JVM崩溃。(猫)这个本地API在整个web应用程序功能中只占很小的一部分,我想说只有5%的用户会访问这个功能。无论应用程序经过多么彻底的测试(我无法访问本机源代码),本机库中存在潜在缺陷的风险可能会导致整个应用程序服务器注销用户,并可能导致停机。
所以问题是-哪种策略更好?
1)是否应该将本机库包装在单独的进程中,这样主web服务器就不会受到本机代码中的错误的影响。我可能可以使用UNIX套接字与我的web服务器中的这个独立进程进行通信。(避免TCP套接字的开销)。如果出现这种情况,请尽快修复问题,并接受5%的用户的停机时间。
或
2)在servlet容器中继续使用JNI。(每一个人都有潜在的停机风险)
你好,罗希特
发布于 2016-06-09 11:44:24
这取决于:
考虑到,如果一个函数不是线程安全的,这并不一定意味着如果从多个线程调用它就会崩溃。它可能只是返回完全错误的结果。
在所有其他情况下,您必须序列化对本机函数的访问。
将它们封装到进程中可能是个好主意,但您必须确保函数一次只能在一个线程中运行。因此,您可能需要实现某种机制,让其他线程/servlet等待,直到其中一个线程/servlet完成对函数的调用。
https://stackoverflow.com/questions/37688629
复制相似问题