多线程成本

时间:2020-01-09 10:35:50  来源:igfitidea点击:

从单线程应用程序到多线程应用程序不仅会带来好处。它也有一些费用。不要仅仅因为可以就启用多线程应用程序即可。我们应该有一个好主意,认为这样做所带来的收益要大于成本。如有疑问,请尝试评估应用程序的性能或者响应能力,而不仅仅是猜测。

更复杂的设计

尽管多线程应用程序的某些部分比单线程应用程序简单,但其他部分则更复杂。由多个线程访问共享数据执行的代码需要特别注意。线程交互远非总是那么简单。错误线程同步引起的错误很难检测,重现和修复。

上下文切换开销

当CPU从执行一个线程切换到执行另一个线程时,CPU需要保存当前线程的本地数据,程序指针等,并加载要执行的下一个线程的本地数据,程序指针等。此开关称为"上下文开关"。 CPU从在一个线程的上下文中执行切换为在另一个线程的上下文中执行。

上下文切换并不便宜。我们不想在线程之间进行不必要的切换。

我们可以在Wikipedia上阅读有关上下文切换的更多信息:

http://en.wikipedia.org/wiki/Context_switch

资源消耗增加

线程需要计算机中的一些资源才能运行。除了CPU时间外,线程还需要一些内存来保留其本地堆栈。它还可能会占用操作系统中管理线程所需的一些资源。尝试创建一个程序,该程序创建的100个线程除了等待外什么都不做,并查看应用程序在运行时需要占用多少内存。