长时间运行的任务,我应该在另一个线程或另一个进程中运行它们吗? [复制]

Posted

技术标签:

【中文标题】长时间运行的任务,我应该在另一个线程或另一个进程中运行它们吗? [复制]【英文标题】:Long running tasks, should I run them in another thread or another process? [duplicate] 【发布时间】:2012-02-07 19:12:36 【问题描述】:

可能重复:Why should I use a thread vs using a process?

我有一些长时间运行的任务,它们会大量消耗 CPU 和内存。 我应该在另一个线程或另一个进程中运行它们吗? 每个选项的好处是什么?

【问题讨论】:

这取决于您所说的“长时间运行”... 10 秒、20 分钟、5 天? 【参考方案1】:

这取决于您要执行的操作。

除了Why should I use a thread vs. using a process? 提到的内容之外,我想补充一点,线程共享它们所属的进程的内存。另一方面,进程不共享内存。每个进程在栈上都有自己的内存空间。

如果您打算处理相同的数据(可能是对部分数据进行操作),我建议您使用线程来执行此操作。让每个线程处理一大块数据。

如果操作完全不相关,请使用流程。我知道这有点含糊;但是如果你不共享数据并且操作不被序列化,你可以使用进程。

通常,一个应用程序(进程)会产生多个线程。如果您有多个应用程序,每个应用程序都是一个进程,并且有自己的地址空间。

【讨论】:

以上是关于长时间运行的任务,我应该在另一个线程或另一个进程中运行它们吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

具有长时间运行任务的单独线程中的计时器

通过将长时间运行的任务拆分为单独的进程来提高程序性能

长时间运行的任务与线程——性能

在 ASP.Net MVC5 中管理长时间运行的进程

芹菜中持久的长时间运行的任务

在 qthread 中停止长时间运行的进程