17.2 多线程编程的难点在什么地方?

多线程使你可以充分利用多个处理器核心(或者说多个处理器)来同时执行多个线程。例如,一个线程正在从磁盘中读取文件(这种操作非常慢),另一个线程可以利用这段空闲时间来进行重度 CPU 计算,使 CPU 的负载能够更为均衡。这种情况也可以使你的程序从多线执行中获得性能提升。

线程一般在同一份数据上进行工作。只要数据没有被修改,多线程读取这些数据就没有任何副作用。然而共享数据一旦被某个线程(或多个)修改,我们就会遇到很多问题,例如:

  • 什么时候线程 A 能够观察到线程 B 的修改?
  • 线程操作数据的顺序是啥样的?(16 章的例子中,出于优化的目的,指令可能被重排了)。
  • 如何在不被其它线程打断地情况下操作复杂的数据?

这些问题没有被妥善解决的话,一些非常难定位的 bug 就会出现了(因为这些 bug 都是偶发而非必现,只有在不同线程的指令在某种特定的顺序下执行才触发)。我们将尽量对这些问题进行理解,并了解如何解决这种问题。

results matching ""

    No results matching ""