Java 用于给定场景的进程或线程?
我有一个场景,我对使用线程或进程感到困惑: 我有一个应用程序,它与不同公司提供的其他几个第三方web应用程序进行对话,并从这些应用程序中提取数据。因此,基本上我的应用程序会点击这些第三方应用程序提供的api,带来大量数据并将它们转储到数据库中 现在,这里有几个重要因素,如网络延迟、db读/写、两端的服务器速度慢/快等。因此,基本上应用程序需要大量的时间和资源,其性能取决于各种因素 现在,对于带来如此巨大的数据,在使用进程/线程方面,什么是设计应用程序的最佳方法 我知道线程有很多积极的方面,比如快速的上下文切换、资源共享、轻量级等等,而且进程比线程重 从我的应用程序的角度来看,我有以下要求:Java 用于给定场景的进程或线程?,java,multithreading,process,scalability,distributed-computing,Java,Multithreading,Process,Scalability,Distributed Computing,我有一个场景,我对使用线程或进程感到困惑: 我有一个应用程序,它与不同公司提供的其他几个第三方web应用程序进行对话,并从这些应用程序中提取数据。因此,基本上我的应用程序会点击这些第三方应用程序提供的api,带来大量数据并将它们转储到数据库中 现在,这里有几个重要因素,如网络延迟、db读/写、两端的服务器速度慢/快等。因此,基本上应用程序需要大量的时间和资源,其性能取决于各种因素 现在,对于带来如此巨大的数据,在使用进程/线程方面,什么是设计应用程序的最佳方法 我知道线程有很多积极的方面,比如快
请指出我在思考过程中是否遗漏了任何案例。首先,我认为你不应该在过程和线程级别考虑解决方案。 相反,您应该首先提出一个解决方案,而不考虑任何可伸缩性、性能和高可用性问题 例如,据我所知,您将使用REST客户端使用第三方外部服务。因此,您需要一个http客户机层。 然后,您很可能会将传入的数据转换为您自己的数据结构。 最后,您需要一个数据库层来持久化转换的数据 拥有解决方案后,您可以对其进行测试,并确定在哪一层需要性能改进、可扩展性和高可用性调整 因为“海量数据”中的“海量”是模糊的。不仅数据的大小,而且处理“海量数据”所需的时间也很重要。如果您需要在一天内处理100GB的数据,这可能没什么大不了的,但每分钟处理100MB的数据就可以了 因此,作为到目前为止我学到的一条一般优化规则,在对优化和可伸缩性进行任何更改之前,您应该清楚地了解解决方案的每一部分,并确定问题点。否则,您可能会花费太多不必要的时间来优化错误的部件,最终会提出一个不可扩展且过期的解决方案