并发编程 - (1) 进程与线程

  • 一、进程与线程

    • 进程

      • 程序由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至 CPU,数据加载至内存。在指令运行过程中还需要用到磁盘、网络等设备。进程就是用来在程序运行时加载指令、管理内存、管理IO的;
      • 当一个程序被运行,从磁盘加载这个程序的代码至内存,这时就开启了一个进程。
      • 进程可以视为程序的一个实例。大部分程序可以同时运行多个实例进程 (eg: 记事本、画图、浏览器等),也有的程序只能启动一个实例进程(eg: 网易云音乐,360安全卫士);
    • 线程

      • 一个进程之内可以分为一到多个线程;
      • 一个线程就是一个指令流,将指令流中的一条条指令以一定的顺序交给 CPU 执行,线程是用来执行指令的;
      • Java 中,线程作为最小调度单位,进程作为资源分配的最小单位。在windows中进程是不活动的,只是作为线程的容器。
    • 进程vs线程

      • 线程存在于进程内,是进程的子集;
      • 进程拥有共享的资源如内存空间,供其内部线程共享
      • 通信
        • 进程:同一台计算机的进程通信成为Inter-process communication;不同计算机之间的进程通信需要通过网络并遵守协议,例如HTTP;
        • 线程:由于共享进程内的内存,线程通信相对简单,多个线程可以访问同一个共享变量
      • 线程更轻量,线程上下文切换的成本一般比进程低
  • 二、并行与并发

    • 并行Parallel(拥有的人力)

      • 多核CPU下,多个核心可以同时运行不同线程
      • 并发+并行示意图

    • 并发Concurrent(一个人三心二意的能力)

      • 在单核CPU中,线程通过任务调度器轮流使用CPU的行为;
      • 在单核CPU下,线程实际上还是串行执行,由于CPU在此案成间的切换非常快让人感觉是同时运行,因此可以被称为微观串行,宏观并行;
      • 并发示意图

  • 三、线程的应用

    • 异步调用

      • 异步vs同步
        • 异步调用:不需要等待结果返回就能继续运行;
        • 同步调用:需要等到结果返回;
      • 实现方式
        • 多线程可以放将方法的执行变为异步的,不需要干等结果返回;
      • 适用场景
        • (1)需要进行视频格式转换的操作时,可以新开一个线程处理,避免阻塞主线程;
        • (2)tomcat的异步servlet,让用户线程处理耗时较长的操作,避免阻塞tomcat的工作线程;
        • (3)ui程序中,开新线程进行其他操作,避免阻塞ui线程
    • 提升效率

      • 可以充分利用多核CPU的优势,提升程序执行效率
      • 案例:需要执行三个计算并汇总结果(多核CPU)
        • 串行时三个计算的总执行时长=t1+t2+t3
        • 并行时三个计算的总执行时间=max{t1,t2,t3}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值