Java并发编程系列之多线程缺点
多线程缺点
从一个单线程应用到多线程应用不仅只有好处,它也会有一些代价。不要仅为了使用多线程而使用多线程。而应该明确在使用多线程时能带来的利大于弊的时候才使用多线程.如果存在疑问,应该尝试测量一下应用程序的性能和响应能力,而不只是猜测。
更复杂的设计
尽管一些多线程应用比单线程应用要简单,但另外一些更复杂。多线程执行访问共享数据的代码时需要特别注意。线程交互往往比较复杂。错误的线程同步产生的错误很难被发现、重现和修复。
上下文切换的开销
当一个CPU从执行一个线程切换到执行另一个线程的时候,CPU需要存储当前线程的本地数据、程序指针等,然后加载另一个线程的本地数据、程序指针等,最后执行。这个切换称为上下文切换(context switch)。CPU会在一个上下文中执行一个线程,然后切换到另外一个上下文中执行另外一个线程。
上下文切换并不便宜。如果没有必要,应该减少上下文切换的发生。
想了解更多的上下文切换可以阅读维基百科:
http://en.wikipedia.org/wiki/Context_switch
增加资源消耗
一个线程为了能运行需要电脑的一些资源,除了CPU外,还需要一些内存来维持它的本地栈。它也需要占用操作系统中一些资源来管理线程。我们可以尝试编写一个程序,让它创建100个线程,这些线程什么事情都不做,只是在等待,然后看看这个程序在运行的时候占用了多少内存。
----EOF-----