在我半年前的上一次工作面试中,技术人员问我,更好的选择是使用100个进程来做一些工作,还是只使用一个过程,但使用100个线程。
没有任何关于CPU有多少核心的信息。
我知道is...it最好的答案取决于..。
在我看来,100个线程解决方案(一般来说)更好,因为:
不幸的是,我没有得到任何反馈,我给出的答案是否正确。
最终,我没有接受那家公司的提议,because...well,我得到了一个更好的报价,但我想知道,这个问题的“最佳”答案是什么。
发布于 2019-11-28 11:34:28
在我看来,100个线程解决方案(一般情况下)更糟,因为:
发布于 2019-11-28 12:23:17
这个问题与现实有些脱节,但它突出了一些有趣的工程主题。
必须更好地定义“更好”:它是更强的健壮性还是更好的性能?
答案应该是100个过程:如果任何一个过程失败,其他进程将继续工作。
如果选择线程,单个线程上的错误可能会损坏内存并导致整个系统失败。
这取决于处理能力,更准确地说取决于CPU和核心的数量:
在大多数情况下,如果没有足够的处理器,100个线程的性能将优于100个进程。
为什么?因为线程和进程必须执行上下文切换才能共享处理器:
当然,如果您有足够的处理器来补偿此开销,则可以选择1000个进程.除非
它们并不完全独立,需要进行通信,这可能会在系统中造成瓶颈,例如由于IPC。
发布于 2019-12-03 12:30:34
没有任何背景,就不可能指出胜利者。有更多的事情要考虑,不仅仅是技术,性能相关的问题。喜欢
这些都会影响你的选择。从组织的角度来看,进程与线程是不同的。线程是进程中的执行路径,因此它们不能很好地进行比较。这就像问,桌面应用程序还是web应用程序,哪个更好?
让我们不要在这个问题上太聪明,只关注一下性能问题。现在我们还有一些问题要回答。
这100个执行路径,它们会同样繁忙吗?在一个进程中有很多线程并不少见,但通常大多数线程都处于休眠状态。让它们同时竞争CPU周期是不有效的,因此,如果您有这么多线程,您希望确保不超过一些(取决于您必须节省的核数)同时运行。有办法做到这一点。如果任务基本上是相互独立的,而您只是想尽快完成工作,那么使用线程是很难打败的.一台机器的场景。因为这不是很好的规模。
进程可以分布在无限多台机器上,只要看一看您可能同时遵循的执行路径的数量,就可以得到更好的扩展。但问题是数据来自何处,以及是否存在为这些线程分发输入数据的问题。如果没有进一步的背景,就不可能说出瓶颈是什么。
因此,这可能是一个聪明的问题,唯一的目的是看看你有多强,当涉及到你需要的信息,你需要做好一项工作。你收到一个不可行的要求,你做什么?你是会根据假设(或毫无头绪)仓促下结论,还是会一直问个不停,直到你完全明白客户需要什么?这将告诉他们一些你对计算机科学的理解,以及你的个性是否能适应他们所处环境的挑战。
https://softwareengineering.stackexchange.com/questions/401752
复制相似问题