- 浏览: 72729 次
- 性别:
- 来自: 北京
最新评论
-
zq3062211015:
想法很好。。万一 c就一个人下车 b很浪费啊
java并发学习之三:非阻塞漫想,关于环岛与地铁 -
zq3062211015:
楼主是大神,膜拜啊,不过有个地方说的不太对啊, if (poo ...
java并发学习之二:线程池(五) -
snake1987:
milk_36 写道终于找到是用java的了!LZ想问一下你们 ...
关于社交游戏中的同步服务器(长连接服务器) -
milk_36:
终于找到是用java的了!LZ想问一下你们项目中protobu ...
关于社交游戏中的同步服务器(长连接服务器) -
hobitton:
额,是我说的不准确哈,server不仅仅是options的集合 ...
java并发学习之二:线程池(四)
文章列表
1.《AI游戏引擎程序设计》看了大概40%吧,粗读,自认为把精华都看了
2.《Programming_In_Lua》看了70%左右,也是受上一本书的启发,顺带看了,内容不多,lua是种很好的脚本语言,适合用于游戏
3.《mysql架构×××》,名字具体忘了,耐着心看了20%吧,不知道为啥,看国人写的很难看下去,可能觉得不够精华吧,没看到什么有用的东西
4.《MongoDB权威指南》,看了40%左右,知道是什么东西,也知道怎么用,内部实现也是nosql那一套,没什么大的区别,倒是用js传到服务器端进行查询这点挺好的,分布式那块没具体看,具体了解了原子操作相关和mapreduce的内容,跟猜想的区别 ...
现在我们的开发中越来越多用锁的情况,锁其实比cas恐怖很多,像性能问题,死锁问题,延时问题,都是极难排查的问题
之前在学习中掌握了一些技巧,在这里分享一下
1.open call
并发编程里面有一个术语“open call”
意思就是当我们在调用一个lock的方式时,我们需要将手中的锁释放掉(如果我们正持有锁),或者尽量避免去调用会lock的方法
看起来很简单,其实这还是很麻烦的事情
这要求我们做到这几点:
a.在所有带锁的方法中都显性地表明:我会加锁的,比如方法名,或者注释
b.把锁封装起来(注意,这个过程不一定是面向对象的)
c.把锁都放到同一层面上同一方法中,也就是说我们如 ...
我们知道,java的虚拟器其实是有两个版本的,
client版比较适合桌面程序,它会做一些例如像快速初始化,懒加载这一类的事情来适应桌面程序的特点
server版则比较适合服务器程序,它做的则是一些针对服务器特点的事情,比如预加载,尤其在一些并发的处理上,它更是会做很多的优化,
比如线程共享变量的处理,它经过编译(运行)发现并没有要求某一变量对其他线程可见,它则不会将该变量同步到主存(可能永远不会)
之前在学习java并发时写过一个线程池
http://snake1987.iteye.com/blog/993112
稍微试了一下-server跟-client的区别
下面是运行结果 ...
社交游戏其实不是太需求游戏脚本
让我对游戏脚本产生兴趣的,主要是在三国资料片中,考虑添加上ai时产生的念头
由于对ai并没有系统的了解,所以粗读了《AI游戏引擎程序设计》一书,里面涉及到了不小的篇幅,专门是讲游 ...
博客好久没打理了,今天有时间,把在公司wiki上写的一些东西移植一下吧
我们的游戏至今已经上线第四个同步玩法了
有点想法,也有些疑惑,在这里发一下,欢迎各位tx各抒己见
准确点说,这里所谓的“同步服务器”其实 ...
项目回忆(一):虚拟房间系统
- 博客分类:
- java
需求:
1.硬件环境:所有服务器都是web容器,有统一的缓存memcached,由于一些原因,不允许用中央控制服务器
2.实现一个虚拟房间系统,即包括房间内的数据可见并共享(数据竞争性),房间有超时检测,房间外部还有一个统一调 ...
最近换了一个公司,确切来说应该是进入了一个新的行业,很多东西的学习都是从0开始的,学的东西很多很杂,先分点记下,以便以后复习回忆或者近一步学习
1.key-value数据库
像redis,memcached都是这样的数据库,网上有一篇小 ...
之前的线程池已实现了基本的功能:运行每一个线程,而且测试了一下,大约速度是ThreadPoolExecutor的1.5倍(当然,这是有充分的理由的,后文会提到)
之后的版本将准备是实现“优雅退出”和优化(非阻塞)空闲线程队列了,这个步骤想了很久,发现了很多的问题(包括准备的实现方法也在这里列一下):
1.初步构思了几个方法
void shutDown():该方法将让池不再接受任务,但会将现有的任务全部运行结束后停止
List<Runnable> shutDownNow():该方法会interrupt线程,然后收集未调用的任务,并进一步回收已调用的任务(“已调用”不包括运行中的,因 ...
首先得描述下什么是JCSP:CSP是Communicating Sequential Processes的缩写
在ibm的developerworks 中国上学习java的并发编程时无意发现的,因为在之前的多线程编程实践中,调试一个多线程的bug都花了大量的时间,所以一直想找点工具或者技 ...
一直都知道有两个jvm,一个是server,一个是client,server适合做server,client合适做client,认识也就停留在这里了
最近在练习玩并发的程序,一时手痒,试了一下-server,居然出来的数据如此惊人,相差近100倍
先大概说一下代码的功能,对了,还要说一点,该测试只占用cpu
1.1千万个任务,任务是将不断地加一个随机数,加10000遍,随机数产生的方法是使用了看Concurrency in practice介绍的随机数产生方法(据说能防止jvm优化)
2.写了一个线程池,线程池大家都知道,就不解释了
(具体代码见java并发学习之二:线程池(三))
3.用线 ...
没找到什么好工具,也没得到好建议,好技巧,只能自己摸索了
一步步优化把
先是优化测试代码
加的内容不多,但挺关键的
测试要模拟的是一个平稳的任务下发过程(如同现实生活中的),所以一下子将所有任务丢到队列中是很不对的,而且数量一大,堆就满了
经过多次测试,决定通过让主线程每发送n个,就休息一段时间来降低主线程的下发频率
以达到平稳的目的
这样设置之后,再适当调一下,就可以让cpu利用率达到一个相对稳定的值了,从而可以更好地通过工具进行观察
public class TestThreadPoolTest1 {
public static void main(String[] ...
在写线程池的时候,遇到了很多的问题,特别是happen-before应该怎么去理解,怎么去利用,还有reorder,哪些操作有可能会被reorder?在这一点上,发现其实《concurrency in practice》也没描述得太清晰。
在网上搜了一遍,发现JSR133的faq相对而言,还算稍微解释了一下,发现JSR133其实也就40多页,所以也就顺带看了一遍,因为大部分的内容都比较简单(越往后看发现越复杂~),但是里面的定义比较难理解,所以只记录了定义和一些个人认为比较重要的地方,或者比较难理解的地方
这里是阅读笔记,以备以后查阅
前言部分
1.下面的网站提供了附加的信息,帮助进一步 ...
Jsr133地址:http://www.cs.umd.edu/~pugh/java/memoryModel/jsr133.pdf
原文的地址:http://www.cs.umd.edu/~pugh/java/memoryModel/jsr-133-faq.html
JSR 133 (Java Memory Model) FAQJeremy Manson and
Brian Goetz, February 2004
1.到底什么是存储模型?
在多处理器系统,处理 ...
到过北京上地的都会知道,上地城铁往西走有一个很大的上地环岛,旁边是中关村发展大厦,第一次到北京的时候还给了小弟一番挺大的感触
经常从环岛这里经过,总会思考一个问题:北京地价这么贵,为什么在这里要建一个这么大的环岛呢?环岛到底有什么作用呢?解决交通拥塞?为行人方便?还是别的原因?
在百度百科可以搜到:是为了减少交通(和谐)事故的发生。
还有别的好处吗?
先看看普通的十字路口,要么横向通车,要么纵向通车,可以这样去理解,在两个道路交叉这块正方形是两个线程抢占的共享变量
A在运行时,需要锁住变量,然后走,B等待,B运行时也一样
在并发里面有一种方法:非阻塞算法
没了解过并发的同学可能不清楚 ...
在看书的时候看到了一个观察死锁的工具TDA(Thread Dump Analysis)
看了半天,才知道这玩意儿需要由jvm产生一个Thread Dump
这个Thread Dump跟之前看到的Heap Dump也不是一回事
windows下是ctrl+break触发,unix下是ctrl+\或者kill -QUIT pid触发
默认是输出到System.out,当然,你可以重定向的
还有一个简单方便快捷的方法:Java VisualVM,并且Java VisualVM中还提供了TDA的插件下载
太深入的现在还没这水平,在之前的代码调试中用了一下
之前的代码中有这样一个错误
void w ...