Java Concurrency <概览>

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个线程的程序,该线程什么也不做,但请等待,并查看运行时应用程序需要多少内存。

你可能感兴趣的:(Java Concurrency <概览>)