多线程有三个好处:
- 更好的资源分配
- 有些情况下,程序设计更简单
- 程序的性能提高
Better resource utilization
假设有一个应用用来读取磁盘里的文件并处理。读取文件需要5秒,处理文件需要2秒。如果需要读取、处理两个文件,在单线程的清下,时间消耗为
5秒用来读取文件 A
2秒用来处理文件 A
5秒用来读取文件 B
2秒用来处理文件 B=========================
总共花费 5 + 2 + 5 + 2 = 14秒
如果使用两个线程来处理
5秒用来读取文件 A
5秒用来读取文件 B + 2秒用来处理文件 A
2秒用来处理文件 B=========================
总共花费 5 +5 + 2 = 12秒
在单线程的情况下,从磁盘读取文件的时候,CPU什么事情都干不了,只能等待读取完毕。如果在多线程的情况下,可以在文件A读取完毕的时候,取出一个线程处理文件A,另外一个线程去读取文件B。这样就可以加快程序的运行速度。
Simpler Program Design
如果采用单线程来实现上述的需求,需要同时关注文件的读取和处理状态。相反,如果使用两个线程,每个线程只处理一个文件就行了。程序设计更简单。
More responsive programs
如果有一个服务器,负责接收请求并处理请求。在单线程的情况下,只能是接受请求并处理完请求才能接受下一个请求,在处理请求的过程中,如果有下一个请求过来的话,这个请求只能等待
while (server is active) {
listen for request
process request
}
如果是多线程,可以使用监听线程负责接收请求,接收到请求之后转发给工作线程去处理,监听线程立马返回去继续监听请求
while (server is active) {
listen for request
hand request to worker thread
}