码迷,mamicode.com
首页 > 其他好文 > 详细

并发编程模型小结

时间:2019-09-14 16:16:41      阅读:108      评论:0      收藏:0      [点我收藏+]

标签:银行   cto   actor   操作   bsp   死锁   支持   wap   很多   

1. 临界区加排他锁(Go sync.Mutex.Lock())

如果并发量大,锁竞争激烈,会导致性能开销大

 

2. 读多写少场景,使用读写锁(Go sync.Mutex.RLock())

支持并发读,但写锁会block住读和写,读多场景性能会好很多

 

3. 对计数使用CAS操作(Go sync.atomic.CompareAndSwapInt64())

CAS由CPU原子指令实现。是一种无锁结构,由于消耗的CPU指令周期少,性能要优于锁结构

 

4. actor并发模型

Erlang和scala akka使用的并发模型。一般并发线程通信有两种实现模型:共享内存和消息传递。共享内存最大的问题在于条件竞争,还容易产生死锁等问题。

actor是一种消息传递实现并发模型,定义了actor,每个actor有一个mail box,负责接收消息。消息只能顺序的放到邮箱中,由actor处理

 

5. CSP模型

Golang使用的是CSP并发模型,与actor唯一区别是没有mail box。代替使用channel进行消息传递,类似于linux的命名管道

 

6. SMT软件事务内存

参考数据库事务的实现,保证操作的ACID特性。通过内存日志实现对共享资源操作的原子性,commit或abort。但由于维护日志的开销,该模型的性能要低于锁。但其优势是可以极大简化多线程编程模型,不会产生诸如死锁等问题。

上述actor模型中,actor内部持有状态,但异步消息传递意味着不能提供一致性的调用过程。对于交易系统,如银行账户存款和提款的操作过程是需要是原子的,这可能需要跨两个账户调用过程是一个原子过程,可以由SMT实现

并发编程模型小结

标签:银行   cto   actor   操作   bsp   死锁   支持   wap   很多   

原文地址:https://www.cnblogs.com/gm-201705/p/11519131.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!