Cas*_*ynn 5 php java multithreading web-applications backgroundworker
我有几年用PHP开发Web应用程序的经验,我也广泛使用Java(但从未用于Web应用程序开发).我正在完成一个大型项目,过去六个月我一直在使用PHP/CodeIgniter构建并使用CloudControl托管(提供自动服务器配置和可伸缩性).
该项目进展顺利,PHP满足了我的需求 - 但现在我正处于开发面向企业用户的Web应用程序的开始阶段,我正在考虑将Java(可能是'Grails')与AWS结合使用Elastic Beanstalk.
我的第一个问题是:多线程,它在Java的Web应用程序开发中使用的频率是多少?使用我的PHP应用程序,我的服务器可能需要对Facebook进行API调用以响应用户的请求(例如发布到用户的墙上).为了避免我的PHP进程在返回用户之前等待API调用完成,我使用Gearman作业排队服务器w/workers将工作从我的主应用程序服务器卸载到后台工作程序.
Java开发人员只是简单地启动一个线程来处理API调用并让主进程返回给用户吗?这是Java开发优于PHP的最大优势吗?谢谢!
Java 开发人员是否会简单地启动一个线程来处理 API 调用并将主进程返回给用户?
这取决于。
如果您这样做,那么原始线程可以做一些其他事情,但除非它被设计为基于事件,否则它最终将需要等待辅助线程完成......然后您又回到了开始的地方。(实际上你的情况更糟......因为你现在有 2 个线程在等待。)
对于使用经典 Java servlet 实现的 Web 服务器,每个用户请求都在其自己的线程上运行。简单的方法是在请求线程上执行 API 调用。这会阻塞线程,但在此期间其他线程可以处理其他请求。假设您在 Web 容器的线程池中有足够的线程,这可以正常工作……尽管您最终会在线程堆栈上使用大量资源(内存)。
Java servlet 规范的最新版本添加了对异步处理的支持。我不太了解细节,但理论上这将允许您在请求正在执行需要很长时间的操作时断开请求线程与请求的连接。然而,我不相信这会有所帮助......除非您有一个 API 的客户端实现,它同样能够使用少量(且有限的)Java 线程并行运行多个并发请求。
可能还有其他替代方案,但可能会需要更多工作。
我的建议是从一个简单的解决方案开始。只需在请求线程上执行 API 调用,并将 Web 服务器配置为使用合理数量的请求线程即可。
您很可能会“浪费”一些内存来获得您实际需要的吞吐量。从长远来看,您可能需要解决这个问题,但到那时您将有时间了解更多有关更具可扩展性的替代方案。
| 归档时间: |
|
| 查看次数: |
222 次 |
| 最近记录: |