首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多线程与多线程

多线程与多线程
EN

Software Engineering用户
提问于 2019-11-28 11:07:30
回答 3查看 1.5K关注 0票数 0

在我半年前的上一次工作面试中,技术人员问我,更好的选择是使用100个进程来做一些工作,还是只使用一个过程,但使用100个线程。

没有任何关于CPU有多少核心的信息。

我知道is...it最好的答案取决于..。

在我看来,100个线程解决方案(一般来说)更好,因为:

  • 线程共享相同的内存。
  • 没有必要进行进程间的通信。
  • 创建新线程比创建进程便宜(在资源方面)。
  • 线程之间有可能只使用指针。

不幸的是,我没有得到任何反馈,我给出的答案是否正确。

最终,我没有接受那家公司的提议,because...well,我得到了一个更好的报价,但我想知道,这个问题的“最佳”答案是什么。

EN

回答 3

Software Engineering用户

发布于 2019-11-28 11:34:28

在我看来,100个线程解决方案(一般情况下)更糟,因为:

  • 线程共享相同的内存,这意味着一个行为不当的线程可能破坏另一个线程的内存
  • 没有明确定义的进程间通信,线程只是简单地写入对方的内存.
  • 创建一个新线程就像在设计良好的系统中创建一个新进程一样便宜(例如,在BEAM/HiPE VM上,一个进程只使用大约300字节的内存,即使在一台不太强大的膝上型计算机上,也有可能拥有100万个进程)。
  • 线程之间有可能只使用指针,这意味着线程无需任何形式的检查或保护就可以读取和写入其他线程的内存。
票数 3
EN

Software Engineering用户

发布于 2019-11-28 12:23:17

这个问题与现实有些脱节,但它突出了一些有趣的工程主题。

首先要做的事情:定义需求

必须更好地定义“更好”:它是更强的健壮性还是更好的性能?

更好的健壮性?

答案应该是100个过程:如果任何一个过程失败,其他进程将继续工作。

如果选择线程,单个线程上的错误可能会损坏内存并导致整个系统失败。

更好的性能?

这取决于处理能力,更准确地说取决于CPU和核心的数量:

在大多数情况下,如果没有足够的处理器,100个线程的性能将优于100个进程。

为什么?因为线程和进程必须执行上下文切换才能共享处理器:

  • 对于线程,这是非常轻的,因为只有寄存器和一些关键的数据/执行结构需要切换。
  • 相比之下,进程的上下文切换要全面得多,因为您还需要确保内存地址空间隔离(虚拟内存地址空间交换)和操作系统资源(例如打开文件等.)。因此,性能开销更高。

当然,如果您有足够的处理器来补偿此开销,则可以选择1000个进程.除非

它们并不完全独立,需要进行通信,这可能会在系统中造成瓶颈,例如由于IPC

票数 3
EN

Software Engineering用户

发布于 2019-12-03 12:30:34

没有任何背景,就不可能指出胜利者。有更多的事情要考虑,不仅仅是技术,性能相关的问题。喜欢

  • 位置(任务能在同一台机器上运行吗?)
  • 任务是否在执行顺序或数据需求方面相互依赖?
  • 当前任务的责任(由谁来做或授权他们?)
  • 安全问题(可访问输入和输出)。

这些都会影响你的选择。从组织的角度来看,进程与线程是不同的。线程是进程中的执行路径,因此它们不能很好地进行比较。这就像问,桌面应用程序还是web应用程序,哪个更好?

让我们不要在这个问题上太聪明,只关注一下性能问题。现在我们还有一些问题要回答。

这100个执行路径,它们会同样繁忙吗?在一个进程中有很多线程并不少见,但通常大多数线程都处于休眠状态。让它们同时竞争CPU周期是不有效的,因此,如果您有这么多线程,您希望确保不超过一些(取决于您必须节省的核数)同时运行。有办法做到这一点。如果任务基本上是相互独立的,而您只是想尽快完成工作,那么使用线程是很难打败的.一台机器的场景。因为这不是很好的规模。

进程可以分布在无限多台机器上,只要看一看您可能同时遵循的执行路径的数量,就可以得到更好的扩展。但问题是数据来自何处,以及是否存在为这些线程分发输入数据的问题。如果没有进一步的背景,就不可能说出瓶颈是什么。

因此,这可能是一个聪明的问题,唯一的目的是看看你有多强,当涉及到你需要的信息,你需要做好一项工作。你收到一个不可行的要求,你做什么?你是会根据假设(或毫无头绪)仓促下结论,还是会一直问个不停,直到你完全明白客户需要什么?这将告诉他们一些你对计算机科学的理解,以及你的个性是否能适应他们所处环境的挑战。

票数 0
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/401752

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档