多线程如何加速应用程序(当线程无法同时运行时)?

xcr*_*ypt 12 multithreading

我正在学习多线程,但在阅读了一些教程后,我有点困惑.我不明白多线程如何加速应用程序.

通过直觉,我会说多线程会减慢应用程序的速度,因为你不得不等待那些信号量.

当线程无法同时运行时,多线程如何以及何时可以加速应用程序?

Joa*_*son 11

我能想到的两种方式,第一种可能是你所说的"并行线程".

  • 如果您有多个CPU或核心,如果您正在运行多个线程,它们可以同时工作.
  • 在单核情况下,如果您的线程最终等待(同步)I/O,那么假设您调用read()从磁带读取100 MB,另一个线程可以调度并在您等待时完成工作.

  • @xcrypt基本上,是的,因为它在两种情况下**一个**核心完成所有工作,多线程有一些开销,理想情况下单线程应该更快.线程解决的问题更多的是在等待I/O等外部事件时保持CPU忙.良好的异步I/O实现可能比线程运行得更快,但是当前实现通常不如纯顺序代码使用. (4认同)