3.多线程的代价

● 更复杂的设计

● 上下文切换的开销


从单线程应用程序到多线程应用程序不仅会带来好处。 它也有一些代价。 不要仅仅因为可以使用多线程,你就启用多线程应用程序。 您应该有充分的理由,期望这样做所带来的收益大于代价。 如有疑虑,请尝试评估应用程序的性能或响应能力,而不仅仅是猜测。

更复杂的设计

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

上下文切换的开销

当CPU的执行,从一个线程切换到另外一个线程时,CPU需要保存当前线程的本地数据、程序指针等,并加载要执行的下一个线程的本地数据、程序指针等。 此切换称为“上下文切换(context switch)”。 即,CPU从在一个线程的上下文中执行,切换为在另一个线程的上下文中执行。

上下文切换并不廉价。 你不应该在线程之间进行不必要的切换。

您可以在百度百科上阅读有关上下文切换的更多信息(原文是链接到维基百科去的,但在国内无方便访问,因此改为了百度百科和知乎上的一篇比较有意思的文章,有条件的也可以直接到维基百科输入“Context switch”关键字查询):

[百度百科]上下文切换

[知乎]什么是上下文切换?

增加资源的消耗

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


译自:Multithreading Costs

Jakob Jenkov

Last update: 2021-03-08

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 多线程的代价 --------------------------------------------------...
    小陈阿飞阅读 1,495评论 0 0
  • 从一个单线程的应用到一个多线程的应用并不仅仅带来好处,它也会有一些代价。不要仅仅为了使用多线程而使用多线程。而应该...
    IT遇岛阅读 378评论 0 0
  • 从一个单线程的应用到一个多线程的应用并不仅仅带来好处,它也会有一些代价。不要仅仅为了使用多线程而使用多线程。而应该...
    Jaesoon阅读 215评论 0 0
  • 多线程的好处 尽管多线程有着许多挑战,但是多线程仍然在使用的原因在于多线程有着诸多好处。其中一些好处如下: 更好的...
    shallowinggg阅读 592评论 0 1
  • 推荐指数: 6.0 书籍主旨关键词:特权、焦点、注意力、语言联想、情景联想 观点: 1.统计学现在叫数据分析,社会...
    Jenaral阅读 5,757评论 0 5