多线程开销

868 阅读1分钟

原文:tutorials.jenkov.com/java-concur…

从单线程转变成多线程应用不光带来一些好处,也需要付出一定的代价。不要因为你会用多线程就必须用多线程。你必须清楚的知道这么做带来的好处大于开销,如果有怀疑,那么测试性能和响应性而不仅仅是猜测。

更复杂的设计

虽然多线程应用有些地方比单线程应用简单,但是其他地方更复杂。当多线程执行的代码访问共享数据时更需谨慎。线程间的交互非常复杂。错误的线程同步引发的问题更难检测,重现和修复。

上下文切换开销

当CPU从一个执行线程切换到另一个执行线程时,CPU需要保存当前线程的本地数据,程序指针等。这个切换被称为上下文切换。CPU从一个线程的上下文执行切换到另外一个线程的上下文执行。上下文切换很昂贵,除非必要否则不要进行线程切换。

你可以在维基百科上获得更多内容

en.wikipedia.org/wiki/Contex…

增加资源的占用

线程在运行时需要占用一些计算机资源。除了CPU时间,线程还需要内存来保存本地栈。也有可能需要操作系统内部资源来管理线程。试着创建100个线程,除了等待什么也不干,看看这个程序在运行时需要多少内存。


下一篇:并发模型