电商项目怎样处理或用啥技术解决高负载、高并发、高可用性问题( 四 )
1. Single Threaded Execution
这个模式是把多线程变成单线程,多线程在同时访问一个变量时,会发生各种莫名其妙的问题,这个设计模式直接把多线程搞成了单线程,于是安全了,当然性能也就下来了。最简单的实现就是利用synchronized将存在安全隐患的代码块(方法)保护起来。在并发领域有个临界区(criticalsections)的概念,我感觉和这个模式是一回事。
2. Immutable Pattern
如果共享变量永远不变,那就多个线程访问就没有任何问题,永远安全。这个模式虽然简单,但是用的好,能解决很多问题。
3. Guarded Suspension Patten
这个模式其实就是等待-通知模型,当线程执行条件不满足时,挂起当前线程(等待),当条件满足时,唤醒所有等待的线程(通知),在Java语言里利用synchronized,wait/notifyAll可以很快实现一个等待通知模型。结城浩将这个模式总结为多线程版的If,我觉得非常贴切。
4. Balking
这个模式和上个模式类似,不同点是当线程执行条件不满足时直接退出,而不是像上个模式那样挂起。这个用法最大的应用场景是多线程版的单例模式,当对象已经创建了(不满足创建对象的条件)就不用再创建对象(退出)。
5. Producer-Consumer
生产者-消费者模式,全世界人都知道。我接触的最多的是一个线程处理IO(如查询数据库),一个(或者多个)线程处理IO数据,这样IO和CPU就都能成分利用起来。如果生产者和消费者都是CPU密集型,再搞生产者-消费者就是自己给自己找麻烦了。
6. Read-Write Lock
读写锁解决的读多写少场景下的性能问题,支持并行读,但是写操作只允许一个线程做。如果写操作非常非常少,而读的并发量非常非常大,这个时候可以考虑使用写时复制(copy on write)技术,我个人觉得应该单独把写时复制单独作为一个模式。
7. Thread-Per-Message
就是我们经常提到的一请求一线程。
8. Worker Thread
一请求一线程的升级版,利用线程池解决线程的频繁创建、销毁导致的性能问题。BIO年代Tomcat就是用的这种模式。
9. Future
当你调用某个耗时的同步方法很心烦,想同时干点别的事情,可以考虑用这个模式,这个模式的本质是个同步变异步的转换器。同步之所以能变异步,本质上是启动了另外一个线程,所以这个模式和一请求一线程还是多少有点关系的。
10. Two-Phase Termination
这个模式能解决优雅地终止线程的需求。
11. Thread-Specific Storage
线程本地存储,避免加锁、解锁开销的利器,C#里面有个支持并发的容器ConcurrentBag就是采用了这个模式,这个星球上最快的数据库连接池HikariCP借鉴了ConcurrentBag的实现,搞了个Java版的,有兴趣的同学可以参考。
12. Active Object(这个不讲也罢)
这个模式相当于降龙十八掌的最后一掌,综合了前面的设计模式,有点复杂,个人觉得借鉴的意义大于参考实现。
最近国人也出过几本相关的书,但总体还是结城浩这本更能经得住推敲。基于共享内存模型解决并发问题,主要问题就是用好锁,但是用好锁,还是有难度的,所以后来又有人搞了消息传递模型,这个后面再聊。
基于共享内存模型解决并发问题,主要问题就是用好锁,但是用好锁,还是有难度的,所以后来又有人搞了消息传递模型。
\u0026gt;\u0026gt;\u0026gt;\u0026gt;0x10 消息传递模型
共享内存模型难度还是挺大的,而且你没有办法从理论上证明写的程序是正确的,我们总一不小心就会写出来个死锁的程序来,每当有了问题,总会有大师出来,于是消息传递(Message-Passing)模型横空出世(发生在上个世纪70年代),消息传递模型有两个重要的分支,一个是Actor模型,一个是CSP模型。
\u0026gt;\u0026gt;\u0026gt;\u0026gt;0x11 Actor模型
Actor模型因为Erlang声名鹊起,后来又出现了Akka。在Actor模型里面,没有操作系统里所谓进程、线程的概念,一切都是Actor,我们可以把Actor想象成一个更全能、更好用的线程。
推荐阅读
- 聪明人养花,这3种“花”怎样也要养一盆,每年能省不少医药费
- 滁宁城际铁路一期项目汊河新城特大桥箱梁架设完成
- 广西鹿寨贫困户玩直播带货变身创业新星以电商帮老乡卖滞销农产品
- 互联网怎样解决“家政服务上门速度慢”的问题
- 盐都区|15个高质量项目签约落户盐城高新区
- |盐城在建省级农业农村重大项目已完成投资65.9亿元
- 怎样看待从1月8号起,QQ钱包开始提现收费
- 银行it人怎样转型
- 南通大学|创业项目聚焦二孩家庭,南通大学喜获国赛金奖
- 农民工工资|海门三项目被省住建厅列入拖欠农民工工资预警名单
