有一个由servlet管理的REST类型的Web服务。
它从数据库中检索大约1000个产品及其spcifications。 这个数据库查询很快。 然后Web服务循环遍历这1000个条目,对于每个产品规范,它将其编码为JSON字符串。每个JSON编码需要10毫秒。因此,通过1000个产品需要10ms x 1000 = 10秒。因此Web服务响应很慢。超过10秒。
我想知道是否可以同时进行此处理,因为将每个产品规格格式化为JSON字符串完全独立于一个产品到下一个产品。所以从理论上讲,如果我创建了一个说4个线程的池,我可以给每个线程250个产品规格并同时重新格式化为JSON,并将处理时间减少近4个。
这在servlet上下文中如何实现?我可以从Servlet或Servlet使用的POJO生成线程池吗?由于像Jetty这样的Servlet容器已经是多线程的,这是否会导致冲突?
由于
答案 0 :(得分:2)
这在servlet上下文中如何实现?
这实际上取决于您的工作量。如果你同时提供许多这样的请求,你会看到很少的收获。
但是,如果您的服务器每分钟处理10个查询,那么确保所有这些核心都能正常运行。
但请记住,您为每个客户端分配了相当多的额外资源,因此您实际上可以获得更好的性能以降低可扩展性。
我可以从Servlet或由a使用的POJO生成一个线程池 的Servlet
是的,绝对的。在使用EJB时,您不希望乱用线程,但使用servlet完全可以。
由于像Jetty这样的Servlet容器已经是多线程的,所以 这会导致冲突吗?
不,完全没有(但请看我上面提到的问题)。大多数Web服务器都是高度线程化的,因为大多数这些线程都是I / O绑定的,给客户端提供勺子的东西 - 使用非阻塞/事件驱动的IO,所需的线程数实际上要低得多。
答案 1 :(得分:0)
如果对所有其他请求者的服务器使用情况公平,则10秒内的Web服务可能没问题。否则,确定,并发(当然限制线程)。
对于ForkJoinPool(java7)来说,这是一个完美的工作。
仅供参考,我会认真考虑jvm分析这个10ms的jason编码......看起来非常长。