1 多线程
2018-09-05 本文已影响3人
史小猿
促使多线程出现的因素:
- 资源利用
比如阻塞io,等待的时间让线程去做其他事情,提高利用率 - 公平
多个用户和程序可能对机器的资源具有相同的权利要求。 最好让他们通过更精细的时间切片共享计算机,而不是让一个程序运行完成然后再启动。 - 便利
编写多个程序通常更容易或更理想,每个程序执行单个任务并使它们在必要时彼此协调,而不是编写单个线程执行所有的任务。
多线程的好处
- 发挥处理器的强大能力
在多处理器上,多线程可以通过提高处理器资源的利用率来提高系统的吞吐率。
在单处理器系统上也可以获得更高的吞吐率,比如说多线程程序在等待某个同步I/O操作时,还有其他线程可以继续运行。
- 建模的简单性
完成单任务时,很简单,只要把这件事做好就行。但是在完成多任务的时候,不仅要把活干好,还要考虑不同任务之间存在优先级和时间。
- 异步事件的简化处理
一部分线程接受客户端请求,另一部分处理器请求。如果是单线程程序的话,处理请求时会停顿导致接受请求阻塞,为了避免这个问题单线程程序必须使用非阻塞的I/O,这种I/O的复杂性要远远高于同步I/O。例如unix select和 poll ,java NIO
- 响应灵敏的用户界面
多线程带来的风险
- 安全性
要额外考虑多线程的安全性的问题,比如多线程计数器(竞态条件) - 活跃性
死锁,饥饿,活锁 - 性能
保存和恢复上下文,加锁