gpt4 book ai didi

java - 斯坦福解析器在Web服务中的使用

转载 作者:行者123 更新时间:2023-11-30 05:08:20 29 4
gpt4 key购买 nike

我需要在网络服务中使用斯坦福解析器。当 SentenceParser 加载一个大对象时,我将确保它是一个单例,但在这种情况下,它是否是线程安全的(根据 http://nlp.stanford.edu/software/parser-faq.shtml 为否)。不然怎样才能高效地完成呢?一种选择是在使用时锁定对象。

知道斯坦福大学的人们是如何做到这一点的 http://nlp.stanford.edu:8080/parser/

最佳答案

如果争用不是一个因素,锁定(同步)将是您提到的一种选择,而且可能就足够了。

但是,如果存在争议,我会看到三个常规选项。

(1)每次都实例化它

每次执行解析时将其实例化为局部变量即可。局部变量是非常安全的。当然,实例化不是免费的,但根据具体情况,可以接受。

(2) 使用线程局部变量

如果实例化成本高昂,请考虑使用线程局部变量。每个线程都将保留自己的解析器副本,并且解析器实例将在给定线程上重用。然而,Threadlocals 也并非没有问题。线程局部变量在未设置为 null 或保持线程消失之前可能不会被垃圾收集。因此,如果它们太多,就会出现内存问题。其次,谨防重复使用。如果这些解析器是有状态的,您需要确保清理并恢复初始状态,以便后续使用 threadlocal 实例不会受到先前使用的副作用。

(3) 池化

通常不再建议使用池化,但如果对象大小确实很大,以至于您需要对允许的实例数量进行硬性限制,那么使用对象池可能是最好的选择。

关于java - 斯坦福解析器在Web服务中的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4325663/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com