并发技术:CSP并发理论

异步(async)

并行:多个任务并发执行

同步(sync)

串行:多个任务依次执行

阻塞(block)

某个并发任务由于拿不到资源没法干活,从而无所事事地干等

进程并发–线程并发–协程并发
异步回调(async callback)

A线程唤起B线程,令其干活,同时给B一个回调函数,命令B在干完活以后,执行这个回调函数。这个回调函数会与A线程发生交互。
A不必阻塞等待B执行结果,AB两个线程可以并发执行。
利弊:

  • 利:效率高
  • 弊:回调地狱(callbackHell),逻辑线不清晰
共享内存
  • 多个并发线程通过共享内存的方式交互数据
  • 线程安全问题:AB间共享的数据地址可能被C并发修改
同步锁/资源锁

为了解决共享内存所导致的线程安全问题,共享的内存地址在特定时间段被特定线程锁定。加锁期间,其它线程无法访问,带来低效率问题。

死锁:互相锁住对方要的资源,都止步不前

A锁住B的资源
B锁住A要的资源
AB同时阻塞
多方之间也可能存在死锁

线程池
  • 背景:线程的开销大

  • 内存:保存上下文数据

  • CPU:需要CPU做线程之间的调度
    为了避免无度创建线程(内存溢出OutOfMemory),在一个池中创建一堆线程,循环利用,用完了以后重置并丢回池中。

  • 利弊:
    1. 利:避免了无度创建线程,降低了OOM的风险
    2. 弊:用不用都占去一大块内存开销

线程并发的弊端
  1. 开线程占内存
  2. 啥也不干就拿走了1M栈空间,1024条线程就占用1G内存
  3. 线程切换占CPU
  4. 内存共享不安全,加锁效率又低下
  5. 回调地狱导致开发难度高
堆栈

  • 变量和对象的名称
  • 引用堆地址

  • 杂乱无章的堆放各种数据
  • 没有栈对其进行引用时,就用nil进行引用,被nil引用的堆中的内容随时可能会被垃圾回收器回收。

垃圾回收

  • 一块堆内存如果没有被栈引用,就会被0号(空nil)所引用
  • 一切被nil引用的堆内存,会随时被垃圾回收器(GarageCollector=GC)回收
CSP模型
  • 可通信的序列化进程(CommunicatingSequentialProcess)
  • 并发的进程间通过管道进行通信
共享内存 VS 管道
  • 内存共享:通过内存共享来进行通信
  • 管道:通过通信进行共享内存
管道
  • 最早由CSP模型提出
  • 以点对点管道代替内存共享实现并发进程间的数据交互
  • 相比内存共享数据交互的效率要高很多
协程

协程(CoRoutine):又叫微线程。没有CPU线程调度和内存保存上下文数据这回事儿。

原文连接:https://blog.csdn.net/u010986776/article/details/82318113

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值