Java Concurrency <概览>
Java 多线程的优点
- 更好的利用资源
- 程序设计变的简单
- 响应更加迅速
更好的利用资源
在目前的技术能力下,CPU的速度是远于IO的速度的,这就导致如果在读取文件时,CPU会在等待IO,造成的CPU的浪费。如果采用多线程的方式,可以在线程A等待IO的时候,执行线程B,这样CPU的利用率就会提高。
程序设计变的简单
设想如果在单线程应用中读取多个文件,那么就必须时刻的知道每个文件的读取状态。但是如果是多线程编程,只需要在每个线程读取一个文件。这样能更好的利用CPU和IO资源,并且是程序设计变得更简单。因为每一线程读取一个文件。
响应更加迅速
考虑一种场景,应用在监听一个端口,并且处理过来的请求,然后请求处理完之后,给客户端响应,然后在处理另一个请求。如果一个请求处理了很长时间,那么其他的请求就得等待。
while(server is active){
listen for request
process request
}
- 另一种选择就是为每一个请求创建一个线程。使每个请求能快速的响应。这样能够快速的响应客户端的请求
while(server is active){
listen for request
hand request to worker thread
}
Java 多线程的缺点
- 设计更加复杂
- 上下文切换的开销
- 增加了资源消耗
设计更加复杂
虽然有些场景使得程序设计变得简单,比如上面提到的场景,但是如果多个线程在处理共享数据时,就得相当的小心,并且不好处理。
上下文切换的开销
当CPU从一处理一个线程切换到处理另一个线程的时候CPU需要保存当前线程的数据和状态,并且开始接手处理另一个线程的相关信息,这就称作是线程切换。线程切换并不是廉价的,会导致CPU偏高。
增加了资源消耗
线程需要计算机的一些资源才能运行。 除了CPU时间,线程需要一些内存来保持其本地堆栈。 它也可能占用管理线程所需的操作系统中的一些资源。 尝试创建一个创建100个线程的程序,该线程什么也不做,但请等待,并查看运行时应用程序需要多少内存。
网友评论