并发编程

并发意味着程序在运行时有多个执行上下文,对应着多个调用栈。
  • cpu时间轮片调度算法
MMU

MMU是虚拟内存管理单元(位于cpu内部的一个硬件)

  • 所有程序使用的是虚拟地址
  • 物理地址无法直接使用
  • mmu映射的最小单位是4kb
并发包含以下几个主流的实现模型:
  1. 多进程
  • pcb:进程控制块
  • 独立的进程地址空间,安全性更好。
  • 进程是最小的系统资源分配单元,拥有独立的进程地址空间。
  • 初始态、就绪态、运行态、挂起态(等待cpu以外的其他资源,主动让出cpu)、停止态
  • 僵尸进程是子进程结束,父进程还没有回收子进程期间,子进程属于僵尸进程。
  • 孤儿进程是父进程先于子进程结束,子进程归属init来回收。
  1. 多线程
  • 节省内存空间
  • 线程是最小的执行单位
  • 进程创建线程后,共用进程地址空间。原有进程变成线程。
  1. 基于回调的非阻塞/异步IO
  2. 协程
  • 程序中有大量阻塞场景时,可以充分利用cpu
  • 较线程更轻量级,节省了函数栈帧调度、内核空间和用户空间切换系统资源的开销。

在工程上,有两种最常见的并发通信模型:共享数据和消息

同步
  1. 同步的必要性:当多个控制流(线程、进程)同时访问同一个共享资源时,需要加同步机制。防止发生与时间有关的错误。

  2. 同步的方法:

  • 添加锁机制,协调多个控制流。
  • 操作系统提供给线程同步使用的所有锁,均为建议锁,不具有强制性
  • golang中有互斥锁Mutex
  • golang中有读写锁RWMutex
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值