Loading

多线程介绍

1. 什么是多线程

  多线程是指在单个进程中运行多个线程,如果一个程序允许运行两个或两个以上的线程,那么他就是多线程程序

2. 为什么要用多线程

  最主要的目的就是提高CPU的利用率

  1. 提高处理速度
  2. 避免无效等待(IO的时候可以做别的事)
  3. 提高用户体验: 避免卡顿,缩短等待时间
    1. 并行处理,提高性能,通常是服务器领域(例如Tomcat),用多个线程接收进来的HTTP请求,而不是排队等待单一的线程处理
    2. 在Android开发中,主线程的重要任务之一是绘制屏幕界面,该线程中不允许进行IO操作或者网络请求,目的就是避免卡顿,影响用户交互
  4. 便于编程建模: 把这个大的任务A分解成几个小任务,任务B、任务C、任务D,分别建立程序模型,并通过多线程分别运行这几个任务,那就简单很多了
  5. 计算机性能定律: 摩尔定律失效,阿姆达尔定律登上舞台
    1. 摩尔定律: 当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24月便会增加一倍,性能也会提高一倍
    2. 阿姆达尔定律: 一般情况下,处理器越多,程序执行的速度就会越快,但是会有一个上限,上限取决于程序中串行部分的比例,并行的比例越高,多处理器的效果越明显

3. 什么场景中会用到多线程

  1. 什么时候需要新开线程?
    通常在需要进行耗时任务的时候,例如执行磁盘IO读写,或者从网络中获取信息的时候
  2. 为了同时做多件不同的事
    1. 开网页同时听音乐
    2. 后台线程: 例如执行定时任务quartz
  3. 为了提高工作效率、处理能力
    1. Tomcat: 每次有一个新的请求过来的时候,Tomcat会把这个请求交给一个新的线程去处理。
    2. 多线程后台并行下载文件
    3. NIO和AIO
  4. 需要同时有很大的并发量的时候,压测

4. 多线程的局限

  1. 上下文切换带来的消耗
  2. 异构化任务(任务结构不一样)很难高效并行
  3. 带来线程安全问题
    1. a++数据错误
    2. 死锁等活跃性问题
    3. 初始化的时候
posted @ 2021-11-11 10:49  繁夏  阅读(631)  评论(0)    收藏  举报