深入学习掌握JUC并发编程系列(一) -- 了解进程与线程概念

一、进程(Process)

  • 程序 = 数据 + 指令(数据结构 + 算法)
    • 指令:运行(加载至CPU)
    • 数据:读写(加载至内存)
    • 进程:加载指令、管理内存、管理IO
  • 进程:运行程序(.exe),即从磁盘加载程序的代码至内存(资源分配的基本单位)
  • 进程是程序的实例:静态存储(程序)——动态运行(进程)

二、线程(Thread)

  • 线程:操作系统进行运算调度的最小单位,包含在进程之中,是进程的实际运作单位
  • 一个线程就是一个指令流:线程负责将指令流中的一条条指令按顺序交给CPU执行
  • 一个进程可以有多个线程,每条线程执行不同的任务

三、两者对比

  • 进程是操作系统资源分配的最小单位(加载指令)
  • 线程是CPU任务调度和执行的最小单位(执行指令)
  • 进程是相互独立的,相互通信复杂,上下文切换成本高,正在运行的程序实例
  • 线程是共享内存的,相互通信简单,上下文切换成本低,真正执行任务的单位
  • 进程是线程的容器

四、并行并发概念

  • 串行(Serial):CPU按顺序处理任务
  • 并行(Parallel):多个CPU(多核CPU)同时处理多个任务
  • 并发(Concurrent):单核CPU“同时”处理多个任务(线程按时间片轮流使用CPU)
  • 并发同时的原理:任务调度器(操作系统中组件),将CPU的时间片(最小约为15毫秒)分给不同的程序使用,由于CPU在线程间(时间片很短)的切换非常快,宏观上感觉是同时运行的
  • 区别:(一般程序运行中既有并行又有并发)
    • 并行:微观并行,宏观并行(多个CPU,同一时间动手做(doing)多件事情的能力)
    • 并发:微观串行,宏观并行(一个CPU,同一时间应对(dealing with)多件事情的能力 )
  • 例子:
    • 并发:家庭主妇做饭、打扫卫生、给孩子喂奶,她一个人轮流交替做多件事
    • 既有并发,也有并行(大部分情况):家庭主妇雇了个保姆,她们一起这些事,这时会产生竞争,例如锅只有一口,一 个人用锅时,另一个人就得等待
    • 并行:雇了3个保姆,一个专做饭、一个专打扫卫生、一个专喂奶,互不干扰

五、线程应用之异步调用

  • 方法调用角度:
    • 同步:方法调用者 需要等待结果返回,才能继续运行(线程阻塞状态)
    • 异步:方法调用者 不需要等待结果返回,就能继续运行(线程非阻塞状态)
  • 多线程可以让方法执行实现异步
  • 结论:
    • 单核CPU下,多线程实际并不能提高程序运行效率,只是为了能够在不同的任务之间切换,不同线程轮流使用CPU,避免一个线程总占用CPU
    • 多核 cpu 可以并行跑多个线程,但能否提高程序运行效率 (要看不同场景)
      • 任务可以拆分:经过精心设计,将任务拆分,并行执行,可以提高程序的运行效率
      • 不是所有任务都能拆分(阿姆达尔定律)
      • 不是所有任务都需要拆分,任务的目的如果不同,拆分和效率没有意义
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值