自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Sai

  • 博客(94)
  • 问答 (1)
  • 收藏
  • 关注

更快的线程池??

 提起线程池我们会想到两件事:1.线程池是为了复用线程避免重复开辟线程带来开销.2.我们用多线程是为了提升执行效率,但是多线程会带来数据同步问题.加锁会降低性能,线程上下文切换也会降低性能. 我在想一个问题:能不能避免加锁和避免上下文切换带来的性能开销?如果能避免这个开销,多线程最后一个被诟病的问题岂不是解决了? 在此之前,我想说这个解决办法并不是用多个线程池组去管理...

2018-07-24 10:21:13 201

关于如何测试服务器能承受的性能

有时候我在想一个问题:"想要知道服务器会不会多少个并发用户进来后会崩掉"崩掉指的是 服务无法访问,各种报错,异常,或者访问异常缓慢.很显然,我们的服务器不是无限制能访问的.但是到底能承受多少用户同时在线访问呢,当有人问你服务器能支持多少人同时在线,怎么去量化这个问题回答具体数值?  进过思考我得出如下一个结论。此结论与程序/性能/业务内容无关。通用的计算理论.假设1:你的...

2018-06-29 12:10:12 4297

java动态代理的方式获取不到方法的参数名称

最近想把data层独立出来,使用rpc的方式来调用统一的data服务器.使用dubbo框架来处理发现了一个问题: 那就是dubbo使用的动态代理方式不能还原参数名称这样就导致了我在dao层的spring cache注解无法通过参数名称来写表达式.只能修改成通过下标的方式来访问cache参数. 不知道这个问题能不能通过cglib代理方式来解决,暂时还没去研究,如有知道方法的还请...

2017-10-17 00:09:50 1667

现在的数据库系统是否还需要事务?

数据库的事务是为了保证几条sql能同时执行成功,如果其中一部分产生错误会回滚操作。保证数据的安全。 但是现在的系统数据层已经不只是依靠数据库来处理数据了,往往会加入缓存系统。对数据的处理产生了干扰,已经不全由数据库来决定了。 例如:public void addGold(User user1,User user2,int gold){user1.setGold(us...

2017-10-07 11:03:50 280

构建更健壮的系统:数据库连接池的问题Too many connections、timeout等等

首先,连接池是为了节省打开关闭数据库连接的一个手段,如果不用连接池,最大能获取连接的数量限制则是mysql等数据库端配置的max_connections字段的数量。使用连接池后,最大连接数就由程序这边来控制了,例如一般的最大连接数为20。一个连接池的配置最常见,最关键的配置是最大连接数和超时时间  <!-- 配置初始化大小、最小、最大...

2017-10-06 22:19:24 514

成倍提升ORM系统SQL性能的一个方法

ORM确实事很方便让人不需要大量的写SQL,但是很多人诟病造成SQL性能不好举个例子,一个功能是修改get用户数据的金币清零然后update非常简单的一个业务: User user=dao.getUser(uid);user.setGold(0);dao.updateUser(user); 就这样一个简单的功能,实际会向数据库发送一长串的SQL update语句...

2017-09-29 14:19:53 1049

构建更健壮的系统:不同的业务放在不同的线程/线程池里面

有时候我们会发现新上线的部分业务出现了问题,并且影响了其他功能。我有时候想到从架构上如何避免这个问题,然后有了这样的一个思路。 开发的时候我们基本上不会考虑到这种问题,整个服务就共用一个线程池,甚至有些系统是单线程的。一旦出现问题整个服务就一起挂掉了这个肯定是我们不想看到的。解决这个问题方法就是把不同模块放在不同的线程里面,如果之前使用的是线程池那么 不同业务也要用不同...

2017-09-28 21:11:43 653

构建更健壮的系统:如何干掉死循环的线程

 为什么要干掉一个线程,这个和更健壮的系统有什么关系。有时候我会想到一个问题,开发的系统基本上就是自己/测试团队测试了几遍然后上线。上线后出现了不可预知的bug怎么办呢,例如出现了死循环或者部分逻辑有问题导致用户点击后会找出非常长的时间等待而且没办法进行其他操作。 java里面很多业务都用到了多线程,业务都放在线程池里面写Thread.interrupt() 是无法终止一...

2017-09-28 20:53:15 443

cpu100%或者cpu过高

 CPU 100%或者过高的时候. 不要犹豫.98.9999999999% 都是while循环导致的! 还有1%是HashMap的线程安全问题导致的

2015-04-08 11:30:39 152

用行为树方式实现AI

 最近苦于思考怎么去加强AI之前都是在代码里面根据各种情况去写代码简单的逻辑还好说,复杂的情况实在是让人受不了一大堆的这种业务逻辑代码自己都看晕了 后来想用行为树的方式去实现AI找了几个行为树编辑器最后找到了这个:http://behavior3js.guineashots.com还可以在线编辑,很符合我的需求 添加各种节点后导出json 然后我来解析....

2015-03-27 12:15:43 356

freyja框架 github地址

 可以查看我的  freyja框架 https://github.com/121077313/freyja  net,cache,jdbc 3个方面的封装.现在用于游戏服务端 

2015-03-27 12:05:49 121

protostuff android

如果你用在android 或者 robovm 上使用protostuff 那么你就得去看看http://wangbt5191-hotmail-com.iteye.com/blog/1914408/这篇文章. 另外protostuff 已经有了@Tag 注解

2014-02-27 21:05:09 333

让CocoStudio变成libgdx的UI编辑器

 首先,这个想法不是我原创.我所知道的原作者是:https://github.com/bigstupidx/libgdx-cocostudio他实现了 ui编辑器和动作编辑器的解析.完成度有多少我还不清楚,没细看代码.我只是觉得他的实现方式不是很好,所以重写ui编辑器的解析部分.我对cocos2d不熟悉,CocoStudio是为cocos2d开发的编辑器.所以会对一些控件属性理解有...

2014-02-13 13:44:13 194

libgdx 与 TexturePacker

使用TexturePacker 来打包图片资源.如果使用默认设置.应该是 allow rotation =true 并且 tirm mode = trim即 允许旋转并且 裁剪 透明部分 这两个选项对于压缩图片大小还是挺重要的.但是在libgdx里面,得到的图片是原封不动的材质.那么 你获取原图就可能得到的是旋转90度之后的材质. 虽然说自己注意些 通过一些封装方法在使用...

2014-01-25 11:12:39 137

libgdx ParticleEffect

开始使用粒子系统做点东西.然后看了看官方粒子和一些网上教程.觉得挺麻烦的.不是很科学. 弄了弄,开始搞明白了几点.1.材质.打开particle-editor.jnlp 就能看到一个自带的粒子效果.第一个坑爹的事情来了.把它保存下来,然后照着例子弄.报一个找不到xxx文件的错误.粒子编辑器里面是没有image的!但是,应该有一个image文件才对!所以,自己创...

2014-01-20 00:00:34 191

记录一个libgdx event奇怪问题

InputEvent e = new InputEvent(); e.setType(Type.touchDown); play.fire(e); e.setType(Type.touchUp); play.fire(e); 通过fire方法模拟clicked事件,但是遇到了一个奇怪额问题.在A screen 的 A stage的初始化方法里面使用fire...

2014-01-19 23:18:16 114

libgdx开发记录

libgdx开发各种记录,对客户端开发一窍不通:1.发现libgdx开发的游戏场景有内存泄露的情况,一开始以为是某些性能问题.但是没有仔细查找原因.后来打开jvirtualvm,查看什么对象在不停的增长.结果发现Texture 在不停的被创建.说明有地方在不停的加载贴图资源? 想不出什么原因.然后通过排除法一个stage 一个actor 的排除.最终定位在一个 "血条"的actor实现...

2014-01-08 18:22:53 100

高并发系统开发碎碎念

程序员最不愿见到的就是程序抛出异常经常会做些激进的测试,然后各种各样的异常都会抛出来用户量增多,并发量加大如果没有去加以控制会发生一堆让你头疼的问题.如:cpu 达到100%,占用内存增大,垃圾回收时间增长,jvm卡顿流量增大,线程安全/阻塞数据库线程池耗尽,获取不到连接 抛出一些异常.这些异常然后会导致业务出现异常,然后数据出现错误.并发量增加,大量的单例模...

2013-12-25 10:04:14 124

原创 数据库连接池数量测试

线程数量设置的地方有3个,业务线程池 数据库连接池 数据库最大线程数 数据库最大线程数设置为500,只是为了不让连接池数量大于这个数,可无视这个数 测试代码,一个查询语句 一个update语句.查询语句无论怎么测试区别不是很明显 就先不去讨论这个,或者后面我再测试下.代码:public class SqlThread { @Autowired IUserDa...

2013-12-20 14:06:58 463

原创 线程数量与程序性能的关系

本文纯属经验之谈,关于单线程和多线程与程序性能的关系! 首先绝大多数设备都是多核的,多线程能比单线程更充分的利用cpu,多线程如果使用线程池就能省下创建线程的开销.如果只是纯粹的计算可能会比单线程要高,而且计算量越大差距会越明显 在我们的实际业务中,以读取数据库为例,当涉及到各种的io操作情况下,毫不犹豫的应该选择多线程了,能避免io传输带来无谓的耗时. 处理能力得到有效的提升...

2013-12-20 10:08:34 1555

GreenVM问题

greenvm按照作者说的做一开始没成功,因为几点:1.作者似乎没说清楚步骤实际上应该是:解压后的文件夹内GreenJVM.exe 和 vm.cfg是最重要的 最好是新建一个单独的文件夹,把这2个文件放进去然后打开vm.cfg 一行行的查看配置其中关注 SET_VM_NAME  SET_START_JAR_PATH 和 SET_START_MAIN_CLASS...

2013-11-28 17:19:32 266

3.9M JRE

最近做了点小东西,给人运行的时候不可能几kb的程序 还要附带一个100M的jre吧. so,参照网上的一些做法.再加工了一下,整出了个4mb大小的JRE2个版本:一种适合greenJvm的jre, jar被pack200压缩过 另外一种则是普通的jre 似乎只支持awt swing 不支持socket 等功能 GreenJVM 的提取rt.jar 功...

2013-11-28 17:06:41 181

spring el bug?

遇到一个spring el 表达式的问题,非常诡异大概是这样:EL1007E:(pos 38): Field or property 'xx' cannot be found on null 左看右看 这个xx不可能为 null,因为它是 int 类型,具体来说为什么会出现这种问题,以后再看,现在先记录下~~...

2013-11-07 19:24:39 68

记录一个mysql的bug以及关于线程池的问题

先说遇到的问题:  java.lang.Thread.State: RUNNABLE at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.read(SocketInputStream.java:129) at com.mysql.jdbc.util....

2013-08-28 17:15:07 202

一个关于 protostuff 的低级错误

protostuff 是什么就不多说了,前段时间用来做通信的序列号模块 直入主题,就是关于probuff 不支持的格式的字段,例如Date 通信的时候,客户端反序列化报错异常信息也没办法google出一个结果来我反复查看是否字节解析错误,是否粘包没处理好,但是没发现问题.然后我把服务端序列化的字节存储起来,在服务端上直接反序列化 结果还是一样的错误!!!!W...

2013-08-01 17:30:43 317

libgdx笔记1

用libgdx开发了一小段时间,做做笔记有的地方也许不对见谅1.使用libgdx看重了跨平台功能和使用java语言开发两点2.这个框架使用起来还是非常简单.方便的,而且可以直接用桌面版运行测试,大大的提高了开发效率3.建议使用,opengl2来开发 虽然少部分机型不支持4.事件传递是从stage开始  暂时就这么点了 ...

2013-05-02 17:16:28 52

freyja2多数据源版本

多数据源在之前的单数据源需要改动部分配置 如果要分成2个数据、1个表实际上会有3个数据库freyja  freyja_0 freyja_1原库保留 freyja的t_user 要进行分库、分表就要在 freyja_0、freyja_1 创建 t_user_0(分1个表 就创建一个 2个表就创建2个,t_user_0、t_user_1) USE `freyja_0`...

2013-02-01 19:17:23 64

准备了个freyja实例项目(单数据源版)

好久没整理了。今年使用freyja-jdbc freyja-cache 做了2个项目了。年底就整理下,本来想整个项目剔除业务之后放出来。结果删啊删啊全删了,于是只是把测试用例放了出来附件就是 jar包和eclipse工程源码。数据库在config文件里面 只有2个表单数据源,配置文件在jdbc 里面修改。第一个数据源里面修改连接信息就好了   主要在 Proper...

2013-02-01 18:34:09 70

代码不是写完了就over了

1、传入错误的参数 2、异常中断流程,一个业务代码里面内容有很多,影响流程的代码可能就那么一块,其他地方用来处理一些不是很紧要的逻辑。例如有这么一个简单的sql查询:“select * from t_user where id =1”,如果1是绝对存在的话,则还有可能出现mysql服务器连接超时异常。超时异常大家实际上属于比较少见的,但是确实有可能出现这个异常,还有另外一种情况,这句代...

2012-07-12 20:56:53 166

svn commit 500

svn服务器用的是visualSVN Server图形界面管理的有一天无法commit,爆500错误 什么!svn/me  什么的然后搞来搞去最后网上找到一个办法。。。 在界面的全局设置里面的常规选项卡auto xxxx 勾选/取消勾选重启 然后再勾选 ok了  Open the VisualSVN Server GUI.Right-Click on...

2012-07-09 12:42:36 233

用到了mysql ignore 解决一些问题

insert ignore into UserProperty(uid,pid,num) (select id,?,? from User); ignore 就是忽略错误  在我想给UserProperty表修改num字段的时候遇到了这么一个问题。 我的需求是 给所有人加上一个pid =1 的道具 但是有的人本身就已经有了这个道具,有的人却没有这个道具 ...

2012-07-07 15:42:36 813

jd-eclipse网站被关了

在此保存下这个插件。

2012-07-06 20:09:55 93

折中处理

不一定事事最求最优解,稍微变通下能够解决很多烦恼。例如:spring的corn表达式不支持last 这种语法。导致在配置时间表达式:每个月最后一天 这样的要求就达不到了。实际上可以配置为每天执行一次,然后在业务里面判断当天是否是这个月最后一天这种方式基本上没多大区别 类似这种办法有很多,不要脑筋转不过来就好。...

2012-07-03 20:01:55 322

mina 粘包无法解决的解决办法

如果你遇到”粘包“问题,实际上可能不是粘包问题。 使用mina的时候铺天盖地的都说要加上:ExecutorFilter   fc.addLast("executor",new ExecutorFilter(Executors.newCachedThreadPool())); 我在测试的时候发现很容易出现粘包问题,ok tcp出现粘包问题很普遍,但是,问题在于我使用的...

2012-06-17 01:57:50 170

CacheInterceptors are thread-safe

spring 的cache:CacheInterceptor,其作者说它是线程安全的类。 但是完全看不出怎么线程安全了。 org.springframework.cache.interceptor.CacheInterceptor

2012-06-13 00:48:46 87

错误的使用spel

在spring aop cache的时候忘记了spel会把参数运算,引发了一个bug。 在来回检查的时候我在想:“我应不应该质疑spring cache 的问题” 但是,想来想去觉得与其质疑人家这么牛x的框架还不如多质疑下自己 顿时醒悟,发现表达式用错了:"#poker.suid+#poker.buid" 导致2个表达式只向的是同一地址 遂改成"#poker.sui...

2012-06-12 23:58:58 134

cache架构上的一些新见解

在我实践自己拓展的spring aop cache spring cache 拓展 过程中,我对如何大幅提高程序性能方面又有了些新的见解。 通过良好的设计,通过spring aop cache 确实是可以达到完全覆盖数据库操作,这样就意味着数据库操作可以被省略。 我发现这个过程中还存在一个敌人:数据库主键。 因为主键的存在,save操作必须经过数据库的返回。解决这个办法也简...

2012-06-11 01:24:33 58

freyja对分库分表设计绝对是最强大的

分库、分表的设计往往比较让人头疼,据我的了解guzz、ibatis等框架在面对分库分表的时候产生了一堆奇怪的东西,通过强迫改造sql达到目的。 freyja项目的一个重要的特性就是对sql无侵入性,从第一个版本到第二个版本的sharding功能都坚持这个原则。 select * from t_user where uid = ?  如果你对guzz、ibatis等...

2012-06-11 01:04:27 93

坚定Freyja2的发展方向

今天为了找一个错花了一个半小时,最终发现有一个小地方写错了。 虽然这个错误与Freyja没什么关系,但是我从中对Freyja做了下反省:我在开始动工Freyja1的时候是非常有信心的,因为我觉得Freyja不是为了轮子而轮子,而是从实际应用出发解决ORM框架带来的性能上的提升,之前也说过,ORM能解析sql 能掌握数据,所以能从中改造获得性能上的提升。对比JDBC而言,ORM才是真...

2012-06-08 02:23:13 80

Mysql 批量操作重大发现

一直测试的批量操作和普通操作性能上没什么区别。觉得很奇怪,而且驱动里面源码也会发现表面上是批量操作实际上也是一条条执行。 后来看了http://elf8848.iteye.com/blog/770032这位的帖子发现了rewriteBatchedStatements这个参数加上之后,简单的测试了下效率提高了30倍 当时就让我震惊了 又测试了下1000条记录/提交...

2012-06-07 16:24:42 65

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除