`
aa87963014
  • 浏览: 150160 次
  • 性别: Icon_minigender_1
  • 来自: 布尼塔尼亚
社区版块
存档分类
最新评论
文章列表
  提起线程池我们会想到两件事: 1.线程池是为了复用线程避免重复开辟线程带来开销. 2.我们用多线程是为了提升执行效率,但是多线程会带来数据同步问题.加锁会降低性能,线程上下文切换也会降低性能.   我在想一个问题: ...
有时候我在想一个问题:"想要知道服务器会不会多少个并发用户进来后会崩掉" 崩掉指的是 服务无法访问,各种报错,异常,或者访问异常缓慢. 很显然,我们的服务器不是无限制能访问的.但是到底能承受多少用户同时在线访问呢,当有人问你服务器能支持多少人同时在线,怎么去量化这个问题回答具体数值?     进过思考我得出如下一个结论。此结论与程序/性能/业务内容无关。通用的计算理论. 假设1:你的游戏10分钟内有6000个用户注册进来,在线数量假设能保持在6000人同时。假设2:你的游戏有大概12个功能,新手引导之后正常操作步骤,玩家大概会在30秒内操作完这12个功能。 那 ...
最近想把data层独立出来,使用rpc的方式来调用统一的data服务器.使用dubbo框架来处理 发现了一个问题: 那就是dubbo使用的动态代理方式不能还原参数名称 这样就导致了我在dao层的spring cache注解无法通过参数名称来写表达式. 只能修改成通过下标的方式来访问cache参数.   不知道这个问题能不能通过cglib代理方式来解决,暂时还没去研究,如有知道方法的还请告知
数据库的事务是为了保证几条sql能同时执行成功,如果其中一部分产生错误会回滚操作。保证数据的安全。   但是现在的系统数据层已经不只是依靠数据库来处理数据了,往往会加入缓存系统。对数据的处理产生了干扰,已经不全由数据库来决定了。   例如: public void addGold(User user1,User user2,int gold){ user1.setGold(user1.getGold+gold); user2.setGold(user2.getGold-gold); dao.updateUser(user1); dao.updateUser( ...
首先,连接池是为了节省打开关闭数据库连接的一个手段,如果不用连接池,最大能获取连接的数量限制则是mysql等数据库端配置的max_connections字段的数量。 使用连接池后,最大连接数就由程序这边来控制了,例如一般的最大 ...
ORM确实事很方便让人不需要大量的写SQL,但是很多人诟病造成SQL性能不好 举个例子,一个功能是修改get用户数据的金币清零然后update 非常简单的一个业务:   User user=dao.getUser(uid); user.setGold(0); dao.updateUser(user);  就这样一个简单的功能,实际会向数据库发送一长串的SQL update语句   如:update user set a=?,b=?,c=?............gold=? where uid = ? 看到这里有人会明白问题出在哪里了,想想一下每个表都有一堆字段, 而实际 ...
有时候我们会发现新上线的部分业务出现了问题,并且影响了其他功能。 我有时候想到从架构上如何避免这个问题,然后有了这样的一个思路。   开发的时候我们基本上不会考虑到这种问题,整个服务就共用一个线程池,甚至有些系统是单线程的。 一旦出现问题整个服务就一起挂掉了 这个肯定是我们不想看到的。 解决这个问题方法就是把不同模块放在不同的线程里面,如果之前使用的是线程池那么 不同业务也要用不同的线程池分开。因为如果这个业务有问题,这个业务所在的线程池也会很快的阻塞掉。 如果不同的业务分开到不同的线程池里面去,至少不会因为这个业务导致其他业务不可用。   再配合上一篇干掉耗时任务的方法, ...
  为什么要干掉一个线程,这个和更健壮的系统有什么关系。 有时候我会想到一个问题,开发的系统基本上就是自己/测试团队测试了几遍然后上线。 上线后出现了不可预知的bug怎么办呢,例如出现了死循环或者部分逻辑有问题导致用户点击后会找出非常长的时间等待而且没办法进行其他操作。   java里面很多业务都用到了多线程,业务都放在线程池里面写 Thread.interrupt() 是无法终止一个非阻塞线程的,只能用Thread.stop() stop()方法又不是推荐方法,不安全并@Deprecated了 但是又只有stop这个方法才能解决死循环 那么我们可以折中下,万不得已的情况才st ...
  CPU 100%或者过高的时候. 不要犹豫.98.9999999999% 都是while循环导致的!   还有1%是HashMap的线程安全问题导致的
  最近苦于思考怎么去加强AI 之前都是在代码里面根据各种情况去写代码 简单的逻辑还好说,复杂的情况实在是让人受不了 一大堆的这种业务逻辑代码自己都看晕了   后来想用行为树的方式去实现AI 找了几个行为树编辑器最后找到了这个:http://behavior3js.guineashots.com 还可以在线编辑,很符合我的需求   添加各种节点后导出json 然后我来解析.需要做的是实现你添加节点的方法   用一个Blackboard 传递属性给下一个节点,记录公共变量   -------------- 具体点的用法说明: 这里面分为复合节点(顺序节点,选择节 ...
  可以查看我的  freyja框架 https://github.com/121077313/freyja    net,cache,jdbc 3个方面的封装.现在用于游戏服务端  

protostuff android

如果你用在android 或者 robovm 上使用protostuff 那么你就得去看看 http://wangbt5191-hotmail-com.iteye.com/blog/1914408/ 这篇文章.   另外protostuff 已经有了@Tag 注解
 首先,这个想法不是我原创.我所知道的原作者是:https://github.com/bigstupidx/libgdx-cocostudio 他实现了 ui编辑器和动作编辑器的解析.完成度有多少我还不清楚,没细看代码. 我只是觉得他的实现方式不是很好,所以重写ui编辑器的解析部分. 我对cocos2d不熟悉,CocoStudio是为cocos2d开发的编辑器.所以会对一些控件属性理解有误导致bug产生,也希望各位能多多的支出错误.     使用的版本(不表示只支持该版本,而是我的使用版本):   libgdx:0.9.9 CocoStudio:v1.2.0.1  http ...
使用TexturePacker 来打包图片资源. 如果使用默认设置.应该是 allow rotation =true 并且 tirm mode = trim 即 允许旋转并且 裁剪 透明部分   这两个选项对于压缩图片大小还是挺重要的. 但是在libgdx里面,得到的图片是原封不动的材质. 那么 你获取原图就可能得到的是旋转90度之后的材质. 虽然说自己注意些 通过一些封装方法在使用上应该没什么障碍,但是还是挺不方便的. trim 也是,TexturePacker  会去掉一些透明部分.导致在libgdx里面得到的材质是裁剪过后的大小.而不是原图大小. 这个得注意了! trim ...
开始使用粒子系统做点东西. 然后看了看官方粒子和一些网上教程. 觉得挺麻烦的.不是很科学.   弄了弄,开始搞明白了几点. 1.材质. 打开particle-editor.jnlp 就能看到一个自带的粒子效果.第一个坑爹的事情来了. 把它保存下来, ...
Global site tag (gtag.js) - Google Analytics