Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用于给定场景的进程或线程?_Java_Multithreading_Process_Scalability_Distributed Computing - Fatal编程技术网

Java 用于给定场景的进程或线程?

Java 用于给定场景的进程或线程?,java,multithreading,process,scalability,distributed-computing,Java,Multithreading,Process,Scalability,Distributed Computing,我有一个场景,我对使用线程或进程感到困惑: 我有一个应用程序,它与不同公司提供的其他几个第三方web应用程序进行对话,并从这些应用程序中提取数据。因此,基本上我的应用程序会点击这些第三方应用程序提供的api,带来大量数据并将它们转储到数据库中 现在,这里有几个重要因素,如网络延迟、db读/写、两端的服务器速度慢/快等。因此,基本上应用程序需要大量的时间和资源,其性能取决于各种因素 现在,对于带来如此巨大的数据,在使用进程/线程方面,什么是设计应用程序的最佳方法 我知道线程有很多积极的方面,比如快

我有一个场景,我对使用线程或进程感到困惑:

我有一个应用程序,它与不同公司提供的其他几个第三方web应用程序进行对话,并从这些应用程序中提取数据。因此,基本上我的应用程序会点击这些第三方应用程序提供的api,带来大量数据并将它们转储到数据库中

现在,这里有几个重要因素,如网络延迟、db读/写、两端的服务器速度慢/快等。因此,基本上应用程序需要大量的时间和资源,其性能取决于各种因素

现在,对于带来如此巨大的数据,在使用进程/线程方面,什么是设计应用程序的最佳方法

我知道线程有很多积极的方面,比如快速的上下文切换、资源共享、轻量级等等,而且进程比线程重

从我的应用程序的角度来看,我有以下要求:

  • 数据库和网络将在多个进程/线程之间共享
  • 相互排斥必须存在
  • 应用程序必须是防崩溃的。因此,当线程崩溃时,它不会影响整个进程
  • 所以对于上面的场景,建议我应该使用什么-线程在同一个进程中还是多个进程中


    请指出我在思考过程中是否遗漏了任何案例。

    首先,我认为你不应该在过程和线程级别考虑解决方案。 相反,您应该首先提出一个解决方案,而不考虑任何可伸缩性、性能和高可用性问题

    例如,据我所知,您将使用REST客户端使用第三方外部服务。因此,您需要一个http客户机层。 然后,您很可能会将传入的数据转换为您自己的数据结构。 最后,您需要一个数据库层来持久化转换的数据

    拥有解决方案后,您可以对其进行测试,并确定在哪一层需要性能改进、可扩展性和高可用性调整

    因为“海量数据”中的“海量”是模糊的。不仅数据的大小,而且处理“海量数据”所需的时间也很重要。如果您需要在一天内处理100GB的数据,这可能没什么大不了的,但每分钟处理100MB的数据就可以了

    因此,作为到目前为止我学到的一条一般优化规则,在对优化和可伸缩性进行任何更改之前,您应该清楚地了解解决方案的每一部分,并确定问题点。否则,您可能会花费太多不必要的时间来优化错误的部件,最终会提出一个不可扩展且过期的解决方案