我正在学习多处理,它似乎适用于以下两种情况之一:
- 我们的程序正在等待一些I/O,因此在等待时去做其他事情是有意义的;
- 我们将程序分解,以便它的各个部分可以"在 parellel 中"运行,以充分利用 CPU。
我对第二种情况感到困惑。我可能只是缺乏对 cpu 真正工作原理的理解:但是如果我们的单线程进程只使用 CPU 的 1%,因此让更多线程运行是有意义的,那么我们为什么不(以某种方式?(加速单个进程,以便它使用更多的 CPU 并更快地完成?
但是如果我们的单线程进程只使用1%的CPU,因此让更多的线程运行是有意义的,那么我们为什么不(以某种方式?(加速单个进程,以便它使用更多的CPU并更快地完成呢?
我们不知道如何。我们做事情的速度似乎存在根本的限制,我们还没有完全弄清楚如何绕过。因此,我们一次做不止一件事。
一个女人需要9个月才能生孩子。所以如果你想要很多孩子,你会得到很多女人。你不会试图让一个女人走得更快。
假设你想将 7 提高到 2000 万次方,并将 11 提高到 2000 万次方。这两个操作中的每一个都可以减少步骤数,但您将达到限制。假设每个操作需要 N 个连续步骤(每个步骤都需要上一步的输出作为其输入(,我们能执行的最快一步是 Q 纳秒。使用一个线程,执行所有操作至少需要 2NQ 纳秒。使用两个线程,可以同时从两个操作中的每一个执行一个步骤,将最小时间减少到 N*Q 纳秒。
这是一个巨大的胜利。
我可能是错的,但是当我们把东西分成线程时,我们想利用CPU的多核架构。
我们大多认为CPU是一个单元,但你一定听说过i5是如何成为四核处理器的,这意味着它有4个内核 - 或4个内核组成CPU,i3是一个双核处理器 - 即它只有两个内核。
因此,四核的总 CPU 利用率将 100% 拆分为 4x25。黑白并发性和并行性是有区别的。并行意味着每个线程都在单独的内核上运行,充分利用它。现在你有4个人做一份工作 - 或者更好的类比是办公室里有4台打印机,4个人可以继续获得他们想要的副本。这就是并行性。
使用相同的类比,让我们将其扩展到一台复印机/打印机,4 个人想要制作副本,我们所做的是利用并发性,我们打印每个请求的副本,但只有 25%,然后我们切换到下一个人,然后是下一个,这将需要 4 次迭代才能打印所有副本。即使我们使用了复印机100%的功能,我们的人员仍然必须等待 - 这个等待时间也取决于他们想要打印的文档的长度 - 所以我们使用抢占之类的东西,你只能执行/打印一定的时间,然后我们开始为下一个人打印。
加快单个进程的速度 - 分配100%的CPU不是问题[尽管我们想运行一堆其他的东西,如GUI,播放音乐,系统服务等,但85%是可行的],当它分布式时,执行时间变成了1/4 当它分布在 CPU 的黑白时。想象一下,你必须打印一本书,有4个复印机,书有400页长——你用4个复印机打印100页。会更快吧?
我希望我说得有道理,去睡觉。