1 促使进程或线程出现的因素
(1)资源利用率。如果程序在等待某个外部操作(如I/O操作)执行完成的同时可以运行另一个程序,那么可以提高资源的利用率。
(2)公平性。不同的用户和程序对于计算机上的资源有着同等的使用权。
(3)便利性。通常来说,在计算多个任务时,应该编写多个程序,每个程序执行一个任务并在必要时相互通信,这比只编写一个程序来计算所有任务更容易实现。
2 线程的优势
(1)如果使用得当,线程可以有效地降低程序的开发和维护等成本,同时提升复杂应用程序的性能。
(2)线程能够将大部分的异步工作流转换成串行工作流。
(3)线程可以降低代码的复杂度,使代码更加容易编写、阅读和维护。
(4)在GUI应用程序中,线程可以提高用户界面响应灵敏度。
(5)在服务器应用程序中,可以提升资源利用率以及系统吞吐量,如发挥多处理器的能力;当一个线程在等待I/O操作时,另一个线程可以继续运行等。
(6)线程还可以简化JVM的实现,如垃圾收集器通常在一个或多个专门的线程中运行。
3 线程带来的风险
(1)安全性问题。安全性的含义是“永远不发生糟糕的事情”,在没有充足同步的情况下,多个线程中的操作执行顺序是不可预测的。
(2)活跃性问题。活跃性的含义是“某件正确的事情最终会发生”线程带来的活跃性问题包括死锁、饥饿、活锁等。
(3)性能问题。线程会带来某种程度的运行时开销,如上下文切换操作的开销、同步机制往往会抑制某些编译器优化等。