文章列表
连接:
http://tutorials.jenkov.com/java-concurrency/synchronized.html
这个人的文章写的相当的清楚,
部分章节的总结:
Starvation and Fairness:
由于调度的不公平性,某线程可能得到较少的执行机会,甚至得不到执行的机会,这种情况叫做starva ...
多核运行的环境下,由于每个CPU都有自己的读写缓存,导致的是一个线程上写的内容,不一定在另一个线程里可见。
JMM(Java memory model)做为语言级别的内存模型,为程序员提供易于理解的内存模型(通过volatie和锁机制,在编译的时候插入内存屏障,限制处理器的指令重排),同时尽量放松对处理器指令重排的限制(处理器重排指令,是为了更好利用处理器的缓存,提升效率).
Break it down:
1. volatile:
1.1 对volatile变量的读写,都等价于加了锁的操作
1.2 对volatile变量的写,相当于释放锁; 对volatile变量的读,相当 ...
并发框架Disruptor,值得研究
http://coolshell.cn/articles/9169.html
这个网站不错,里面有很多关于多线程编程的文章
http://ifeve.com/overview/
参考:java,NIO, reactor
http://www.iteye.com/topic/1131012
一个老外写的NIO的教程,非常清楚
http://tutorials.jenkov.com/java-nio/selectors.html
基本上看完了以上文章,NIO的reactor模式,和epoll是一回事,通过一个线程,监听事件的发生,然后根据事件的不同类型进行处理。
想用nginx,主要的考虑:
1. 防CC攻击,nginx变成一个反向代理
2. 负载均衡
现在还不知道nginx是否能满足业务逻辑上的需求.
参考:感觉写的非常的详细
http://www.nginx.cn/76.html
我想用线程池的模式来解决多线程环境下资源竞争的问题(不用sychronized):比如针对同一个用户的操作,都丢到同一个线程中去。怎么实现呢?通过user_id丢到相应的线程池中,而线程池用newSingleThreadExecutor实现
引用newSingleThreadExecutor:创建一个单线程的线程池。这个线程池只有一个线程在工作,也就是相当于单线程串行执行所有任务。如果这个唯一的线程因为异常结束,那么会有一个新的线程来替代它。此线程池保证所有任务的执行顺序按照任务的提交顺序执行。
参考文章:我仔细看过参考文章中的最后一篇,写的挺不错
http://www.cnblogs.c ...
1. Mysql的配置和部署
1.1 主从
1.2 分表
1.3 备份
非常好的文章:MySQL性能调优与架构设计-架构篇
http://www.360doc.com/content/11/1204/03/61151_169511896.shtml
补充:数据库的架构,选用redis做缓存,mysql做落地数据库
考虑典型的用例:
step 1: 用户登陆,先从redis加载,如果miss,则去mysql读入数据,加载到gameserver,并且缓存到redis
step 2: 用户数据变更,比如打胜利一场比赛,由于是gameserver先行算出来的结果,直接改变ga ...
发现还是要源码安装mysql
参考1:用源码安装,做多个文件夹
http://www.mysqlsystems.com/2009/04/howto-run-mutiple-mysql-server.html
参考2:思路是利用mysql_multi
http://www.chinaunix.net/old_jh/17/735018.html
另外mysql官方的dev guide也有提及,但写的并不清楚,思路也是用mysql_multi
参考3:
http://dev.mysql.com/doc/refman/5.1/zh/database-administration.html#mult ...
看到jedis有pool,不禁好奇pool的用途.
跟大牛讨论了一下Pool的用处,他的观点:
复用!还是复用
而我的疑问是,为什么数据库要用连接池呢?一个连接不够吗?
这篇文章提到了,jedisPool的主要解决的是多线程环境下线程安全的问题,因为单个jedis实例不是线程安全的:
http://my.oschina.net/XYleung/blog/101027
这篇文章则详细的讲解了jedisPool的配置
http://snowolf.iteye.com/blog/1633196
java里的 inputStream.read()
方法是block的,这种说法是不是意味着,不是busy waiting,是wait在一个condition上。想了解java底层是怎么实现的。
考虑用block的方式,
因为如果用asychronized的方式的话,是不是会导致顺序的问题?
比如用户连续两个请求,这两个请求的callback的执行顺序是不是会颠倒?
有待考虑