编程中的并发与锁

【计算机知识串讲】编程中的并发与锁

https://www.bilibili.com/video/BV1Ng4y1q7bm 学习笔记

南北桥

南桥

带宽比较低的设备

USB 鼠标 键盘

北桥

高速访问 带宽高的设备

CPU RAM PCI-E

编程中的并发与锁

CPU常见参数

架构

  • X86 PC 服务器
  • ARM 只能手机移动设备
  • MIPS 小型路由器

频率

5GHz 每秒钟进行5G次基础指令运算

核心数和线程数

一个cpu芯片可以集成多个 cpu 核心,可以并行处理任务。一般核心数=线程数

cache

CPU的缓存是对主存的高速缓存。

CPU状态查看 linux

  • cat /proc/cpuinfo
  • top
  • vmstat 
    • us 用户使用
    • sy 系统使用
    • id 空闲CPU
    • wa 等待IO 的CPU
    • st 虚拟机
  • uptime 电脑运行了多长时间 负载
    • load average 平均负载
    • 正常状态 比当前CPU低

编程中的并发与锁

进程 线程 协程

进程

资源调度管理的最小单位

进程中的所有线程共享一套地址空间

线程

多线程 在CPU阻塞情况下很有用

线程的五种状态 只有运行中占用 CPU 资源

编程中的并发与锁

 线程创建销毁 和 切换

线程池 进行管理 线程的 创建 和 销毁  减少了消耗

协程

编程中的并发与锁

协程能够减少一部分的 线程切换

协程,英文Coroutines,是一种比线程更加轻量级的存在。正如一个进程可以拥有多个线程一样,一个线程也可以拥有多个协程。

协程不是进程或线程,其执行过程更类似于子例程,或者说不带返回值的函数调用

 

Synchronized 关键字

编程中的并发与锁

如果是 先state=0;然后 持有者 = null;

state 等于零 之后 会调用 lock()

持有者 = null 和 lock 的 持有者 = 当前线程 可能会 冲突

 但是 先 持有者 = null; 再 state = 0; 就会避免这个问题的发生。