将程序的不同部分分离到不同的进程中,似乎比将所有东西都线程化更加优雅。在什么情况下,使用线程运行事物与将程序分离为不同的进程才有意义?何时应该使用线程?单核和多核操作是否会影响它们的表现方式?
您希望使用多个线程而不是多个进程的原因有两个:
例如:
具有图形用户界面(GUI)的应用程序通常将一个线程用于GUI,其他线程用于后台计算。例如,MS Office中的拼写检查器是一个与运行Office用户界面的线程分离的线程。在这种应用程序中,使用多个进程而不是多个线程会导致性能变慢,并且代码难以编写和维护。
除了使用线程而不是进程的优点外,还有:
优点:
但也需要考虑一些缺点:
至于你问题中重要的部分“何时应该使用线程?”
那么你应该考虑到一些事实,即线程不应改变程序的语义。它们只是改变操作的时间。因此,它们几乎总是用作性能相关问题的简洁解决方案。以下是一些可能使用线程的情况的示例:
我假设你已经知道需要使用线程或进程,所以我认为选择其中一个的主要原因是数据共享。
使用进程意味着您还需要进行进程间通信(IPC)来将数据输入和输出进程。如果该进程需要隔离,则这是一件好事。
我同意上面大部分的回答。但是从设计角度来看,当我想要一组逻辑相关的操作并行执行时,我宁愿选择线程。例如,如果您运行一个文字处理器,将有一个线程在前台作为编辑器运行,另一个线程在后台定期自动保存文档,因此没有人会单独设计一个过程来执行该自动保存任务。
看到这篇文章,讨论很有趣。但我觉得缺少了一个点或者是间接指出了。
创建新进程是昂贵的,因为必须分配和初始化所有数据结构。将进程细分为不同的控制线程以实现进程内多线程。
使用线程或进程来实现目标取决于您的程序使用要求和资源利用率。