多线程编程技术能够解决单处理器计算机和多处理器计算机的诸多问题,单处理器计算机大多用来运行最终用户软件,多处理器计算机通常用作服务器。

单处理器计算机
  • 多线程编程为计算机用户提供了更好的响应能力,并且使用空闲时间处理后台任务。如果在单处理器计算机上使用多线程编程,那么:

在任何时刻都只有一个线程在运行。

  • 后台线程仅在主用户线程空闲时才执行。连续运行的前台线程将使后台线程得不到处理器时间。

  • 对一个线程调用 Thread.Start 方法时,此线程只有等到当前线程结束或被操作系统抢占后才会执行。

  • 出现争用条件的原因通常是,程序员未预见到一个线程可能会在一个难以控制的时刻被抢占这一事实,有时就会出现另一线程抢先使用代码块这种情况。

多处理器计算机
多线程编程提供了更大的吞吐量。十个处理器可以完成一个处理器的十倍的工作量,不过,只有将任务分开并让十个处理器同时工作才行;线程为划分任务并利用额外的处理能力提供了一种方便的办法。如果在多处理器计算机上使用多线程编程,那么:

  • 可以并发执行的线程的数目取决于处理器的数目。

  • 后台线程只有在正在执行的前台线程的数目小于处理器的数目时才执行。

  • 当您对一个线程调用 Thread.Start 方法时,此线程可能会,也可能不会立即执行,具体取决于处理器数目和当前在等待执行的线程的数目。

  • 争用条件不仅可能因为线程被意外抢占而发生,还可能因为在不同的处理器上执行的两个线程在抢用同一代码块而发生。