我有幸参与了几个高并发项目的开发,之前参与设计和开发了一款答题手游的服务器端代码,并在上线后和同事奋战了几个昼夜解决上线后出现的高并发问题,目前该游戏已经运行稳定了几个月,日活在百万级别。和一些大型购物网站比起来,百万级别算不上高,但是麻雀虽小,五脏俱全,代码处理并发的设计思路和解决方案大致是相同的。
这几天翻看别人写的博客,大家都很关心并发的问题,也涉及到了实际处理并发的总总技术。结合之前的经验,我也突然有了些灵感,准备写几篇跟大家交流一下,也正好自己沉淀积累一下。
大概的一个计划,并发问题在编程层面就是多线程的问题,最后会落实到具体的线程技术
- 并发/线程的一些概念,概念很重要,没有理论指导的话会导致理解不够全面
- 多线程问题的本质 -- 有序性,可见性,原子性
- synchronize的底层实现
- volatile的底层实现
- 无锁算法的底层实现 -- CAS
- 原子变量的实现
- final关键字的新含义
- 深入理解Java内存模型
- 指令重排序和内存屏障
- 顺序一致性和Happens-before规则
- 一些基本的硬件知识
- 一些处理同步问题的技术