多线程的代价

原文链接http://tutorials.jenkov.com/java-concurrency/costs.html

把一个单线程程序改写成一个多线程程序带来的不只是优势,使用多线程也得付出一定的代价。不要为了多线程而多线程。你应该在多线程带来的优势和付出的代价之间权衡利弊。决策的过程中遇到迷惑的时候,可以通过衡量应用程序的性能或者响应性而做出决策,而不是凭空猜测。

更复杂的设计

尽管多线程应用程序的部分设计要比单线程应用简单,然而其他的部分却更复杂。被多个线程执行的代码访问共享数据时需要特别的注意。线程之间的交互有时很复杂。不正确的线程同步引起的错误很难被发现、重现和解决。

上下文切换的开销

CPU 从一个线程切换到另一个线程需要保存当前线程的局部变量、程序计数器(program pointer)等。还得加载待执行线程的局部变量、程序计数器等。这个切换叫做“上下文切换”。 CPU 从一个线程的上下文切换到另一个线程的上下文。

上下文切换的开销并不低,最好不要在线程之间切换,除非是必须的切换。
你可以在维基百科上查看关于上下文切换的更多资料:http://en.wikipedia.org/wiki/Context_switch

增加了资源的消耗

一个线程能跑起来需要计算机的一些资源。除了 CPU 时间外一个线程还需要内存来保存它的局部栈(local stack)。为了管理线程还得占用操作系统内的一些资源。试着在一个程序中创建 100 个线程,这 100 个线程什么也不做只是处于等待状态,然后启动这个程序看看这个程序占用了多少内存。

Next: 并发模型

你可能感兴趣的:(多线程缺点,多线程的代价)