并发笔记 | 青训营笔记

110 阅读3分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第3篇笔记。

并发笔记

线程概述

  • 进程:
    • 进程是计算机中程序关于某数据集合上的一次运行活动,是操作系统进行资源分配与调度的基本单位
    • 操作系统中正在运行的一个程序
  • 线程:
    • 线程是进程的一个执行单元
    • 一个线程就是进程中一个单一顺序的控制流,进程的一个执行分支
    • 进程是线程的容器,一个进程至少有一个线程,也可以有多个线程
    • 在操作系统中是以进程为单位分配资源,每一个线程都有自己的线程栈,寄存器环境,自己的线程本地存储
  • 主线程与子线程
    • JVM在启动的时候会创建一个主线程,该主线程负责执行main方法,主线程就是运行main方法的线程
    • java中的线程不是孤立的,线程之间存在一些联系,如果A线程中创建了B线程,那么称B线程是A线程的子线程,A就是B线程的父线程

二者对比

  1. 进程基本上相互独立,而线程存在于进程内,是进程的一个子集
  2. 进程拥有共享的资源,如内存空间等,供其内部的线程共享
  3. 进程间通信较为复杂
    1. 同一台计算机的进程通信称为IPC
    2. 不同计算机之间的进程通信需要通过网络,共同遵守共同的协议,如HTTP
  4. 线程通信相对简单, 因为他们共享进程内的内存,一个例子是多个线程可以访问同一个共享变量
  5. 线程更轻量,线程上下文切换成本一般上要比进程上下文切换低

并发和并行

单核cpu下,线程实际上是串行执行的,操作系统中有一个组件叫做任务调度器,将cpu时间片分给不同的线程使用,只是由于cpu在线程间(时间片很短)的切换非常快,人类感觉是同时运行的 一半将这种线程轮流使用cpu的做法称为并发,concurrent

image.png 多核cpu下,每个核都可以调度运行线程,这时候线程可以是并行的

image.png

  • 并发(concurrent)是同一时间应对多件事情的能力
  • 并行(parallel)是同一时间动手做多件事情的能力

应用

从方法调用的角度来看

  • 需要等待结果返回,才能继续运行的就是同步
  • 不需要等待结果的返回,就能继续运行的是异步 注意: 同步在多线程中还有另外一层意思,就是让多个线程步调一致

并发之共享模型

  • 管程-悲观锁(阻塞)
  • JVM
    • 原子性
    • 可见性
    • 有序性
  • 无锁-乐观锁(非阻塞)
  • 不可变
  • 并发工具
    • 线程池
    • J.U.C
      • Lock
      • Semaphore
      • CountdownLatch
      • CyclicBarrier
      • CncurrentHashMap
      • BlockingQueue
      • CopyOnWriteArrayList
    • disruptor
    • guava
  • 异步编程
    • CompleableFuture
    • 反应式
      • project-reactor

      • spring webflux

并发之非共享模型

  • 私有
  • Actor -弱一致性
    • akka

并行

  • 函数式编程
  • 并行编程
    • 映射
    • 归约