多线程的优势和风险

多线程一直都被广泛的讨论和研究,可是为什么要用多线程呢?多线程又究竟会产生哪些问题呢?

  • 线程的优势
  • 线程的风险

多线程的优势

提高系统的吞吐率:多线程编程使得一个进程可以有多个并发操作,例如当一个线程以为IO操作而处于等待时,其它线程仍然可以执行其操作。
提高响应性:使用多线程的情况下,对于GUI软件,如Desktop程序,一个慢的操作(比如从服务器下载一个大文件)并不会导致软件的界面出现被冻住的现象而无法响应用户的其他操作;对于WEB程序而言,一个请求慢了并不会影响其它请求的的处理。
充分利用多核CPU的资源:现代计算机普遍拥有多个核心,大到大型机,小到手机。使用恰当的多线程编程可以充分理由多核资源。
最小化对系统资源的使用:一个进程的多个线程可以共享其所在进程所申请的资源如内存空间,因此使用多个线程相比于多个进程进行编程来说,节约对系统资源的使用。(值得注意的是,如果线程的所需要的资源超过当前进程所拥有资源,进程还是会在申请更多的内存)
简化程序的结构:线程可以简化复杂应用程序的结构。比如做一件很复杂的事情,但是事情实际上是可以分步进行的时候,就可以使用多线程来简化程序的结构。

多线程的风险

共享数据问题:多个线程共享数据问题的时候,如果没有采取相应的并发访问措施,那么就可能产生数据不一致,如脏读,丢失更新。
上下文切换:如果线程过多,CPU资源出现紧张,上下文切换会增加系统的消耗,不利于系统的吞吐率。所以控制同时运行的线程数量很重要。一般会使用线程池技术,NIO等措施。
可靠性:以往讲到多线程编程,我们一般都是认为是但进程多线程。,试想如果某个java进程由于内存泄露导致JVM崩溃而意外停止,那么进程中所有的线程也就随之而无法继续运行,因此,从提高软件的可靠性角度来看,某些情况下可能要考虑多进程多线程的编程方式,而非简单的单进程多线程方式。
线程生命体征问题:即常说的死锁,活锁,饥饿等问题。

“`

猜你喜欢

转载自blog.csdn.net/chenbinkria/article/details/79779626