我有一个控制器操作,聚合来自多个来源的数据:Web服务,数据库,文件查找等......并将结果传递给视图。因此,为了呈现页面,所有任务必须已经完成。目前它们是按顺序执行的,但由于它们是独立的,我正在考虑并行运行它们,因为这可以提高性能。
那么实现这一目标的最佳方法是什么?对于每个任务,在所有任务完成后启动一个新线程并阻塞主线程?我应该使用线程池中的线程还是手动生成新线程?使用线程池中的线程会限制我的Web服务器提供新请求的能力,因此这可能不是一个好主意。手动生成新线程可能会很昂贵,所以在一天结束时,通过并行执行这些任务或者让它们按顺序运行会有性能上的净增益吗?
答案 0 :(得分:1)
如果是在生成自己的线程或使用线程池线程之间,我会说使用线程池中的线程。如果发现线程用完,可以随时调整服务器设置以允许池中有更多线程。
答案 1 :(得分:0)
回答最后一个问题的唯一方法是实际测试它,因为我们不知道单独的聚合任务有多复杂。如果您想给出响应式UI的错觉,您可以始终显示加载页面并使用AJAX启动聚合。即使是非线程,这也可以充分安抚您的用户。