多线程基本概念

进程和线程

进程

  • 程序由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至CPU,数据加载至内存。在指令运行过程中还要用到磁盘、网络等设备
  • 当一个程序被运行,从磁盘加载这个程序代码到内存,就开启了一个进程
  • 一个进程可以视为程序的一个实例

线程

  • 一个进程可以分为一到多个线程
  • 一个线程就是一个指令流,将指令流中的一条条指令以一定的顺序交给CPU运行
  • Java中,线程作为最小调度单位,进程作为资源分配的最小单位,在windows中进程是不活动的,知识作为线程的容器

线程和进程的对比

  1. 进程基本是相互独立的,线程存在于进程内,是进程的一个子集
  2. 进程拥有共享资源,入内存空间等,供其内部的线程共享
  3. 进程间通信较为复杂,同一计算机内的IPC通信、和不同计算机之间的网络通信;而线程的通信相对简单,因为他们共享进程内的内存
  4. 线程更轻量,线程上下文切换成本比进程上下文切换成本低

并行和并发

并发:同一个时间段,多个线程串行执行;是指同一时间应对多件事情的能力
并行:同一时刻,多个线程同时执行;是指同一时间动手做多件事情的能力

多线程典型应用

异步调用

同步:需要等待结果返回,才能继续运行就是同步
异步:不需要等待结果返回,就能继续运行就是异步

  • 多线程可以让方法执行变为异步的,比如磁盘读取文件,假设读取操作花费5s,如果多线程,这5s调用者什么都做不了
  • 比如在项目中,视频文件需要转换格式等比较费时的操作,这时开一个新线程处理视频转换,避免阻塞主线程
  • tomcat中的异步servlet也是类似的目的,让用户线程处理耗时较长的操作,避免阻塞tomcat的工作线程
  • ui程序中,开线程进行其他的操作,避免阻塞ui线程导致用户操作界面卡死

提高效率

充分利用多核CPU多个线程可以并行执行)的优势,提高运行效率,例如,执行三个计算:

  • 计算1花费10ms
  • 计算2花费11ms
  • 计算3花费9ms
  • 汇总花费1ms
    如果串行执行,总花费时间是10+11+9+1=31ms
    如果是并行执行,则可以同时执行计算1、2、3;总花费时间只有12ms
  1. 单核CPU下,多线程不能实际提高程序运行效率,只是为了能够在不同的任务之间切换,不同线程轮流使用cpu,不至于一个线程总占用cpu
  2. 多核cpu可以并行跑多个线程,但是能否提高程序效率还要取决于线程的任务目的是否相同,如果任务都互不影响,拆分是没有意义的
  3. IO操作不占用cpu,只是一般拷贝文件使用的是阻塞IO,此时相当于线程虽然不用cpu,但是需要一直等待IO结束,没有充分利用线程。所以有了非阻塞IO和异步IO优化
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值