- 浏览: 201492 次
- 性别:
- 来自: 杭州
最新评论
-
budairenqin:
budairenqin 写道carlosfu 写道膜拜一下,要 ...
写个RPC娱乐一下 -
budairenqin:
carlosfu 写道膜拜一下,要是把实现过程写个博客或者文档 ...
写个RPC娱乐一下 -
dengchang1:
好文章。 详细看了《Netty源码细节1--IO线程(Even ...
Netty源码细节3--accept(Linux os层 + Netty层代码细节) -
carlosfu:
膜拜一下,要是把实现过程写个博客或者文档就更赞了
写个RPC娱乐一下 -
budairenqin:
I_am_rookie 写道你好!能把安装包发我一下吗?我找了 ...
CentOS 6.3 X86_64安装MySQL 5.5.28 64-Bit RPM以及my.cnf配置
文章列表
来阿里一年了一直都在做业务, 也有一些怀念以前一直撸网络IO的时光, 可以肆无忌惮的消耗时间去研究感兴趣的东西, 现在反而被业务压得太累, 没太多时间学习额外的东西...
前段时间指导师弟师妹们参加阿里中间件的比赛, 然后自己手痒痒, 消耗了大部分的半夜看电影和睡觉时间, 撸了个娱乐性质的RPC玩玩
https://github.com/fengjiachun/Jupiter
然而撸着撸着上瘾了, 也算相对完整的实现了一个RPC的大部分功能了吧, 自测了下性能还算说的过去.
性能报告:
小数据包同步阻塞调用qps: 10w+ (测试代码见jupiter-exa ...
发在并发编程网了
http://ifeve.com/juc-atomic-class-lazyset-que/
转自己的在公司发的文章:
前言
本菜鸟有过几年的网络IO相关经验, java层面netty也一直关注, 最近想对自己所了解的netty做一个系列的笔记, 不光技术水平有限, 写作水平更有限, 难免有错误之处欢迎指正, 共同学习.
上一篇讲了bind, 这篇分析一下accept的细节, 我觉得网络IO相关开发很多时候不能仅仅局限于java层, 尤其从accept开始一个连接诞生了, 什么拥塞控制啊, 滑动窗口啊等等一系列底层的问题可能就开始会渐渐困扰到你了, 这一章尝试先从linux内核的tcp实现开始分析accept
源码来自linux-2.6.11.12, 还参考了[TCP_IP.Ar ...
转自己在公司的文章:
本菜鸟有过几年的网络IO相关经验, java层面netty也一直关注, 最近想对自己所了解的netty做一个系列的笔记, 不光技术水平有限, 写作水平更有限, 难免有错误之处欢迎指正, 共同学习.
源码来自Netty5.x版本, 本 ...
先看代码,来自HashMap.putVal()
Node<K,V> e; K k;
if (p.hash == hash &&
((k = p.key) == key || (key != null && key.equals(k))))
e = p;
else if (p instanceof TreeNode)
e = ((TreeNode<K,V>)p). ...
关于伪共享这个概念,请先参照http://ifeve.com/falsesharing/
伪共享的样子:
Java view:
public class VolatileLong {
volatile long v = 0L;
}
Memory view:
...–––-)(––––HV––––HV–––)(–––...
我们看到,两个VolatileLong对象被load到了同一个缓存行里面,如果一个线程要修改对象1,另一个线程同时要修改对象2,此时就要面对伪共享这个无形的性能杀手了
jdk6中的解决办法:
Java view:
public class Vol ...
个别特殊情况下,我们可能想抛出受检查的异常但却并不想在方法上加入throws XXException的signature
比如下面的代码不能成功编译:
public static void main(String[] args){
throw new Exception();
}
需要改成这样:
public static void main(String ...
简单过一下Netty3.6.6.Final源码,让自己对各个流程有个稍微清晰的理解,只是文字描述,尽量描述简单,有时间再画画图
Server启动:
1.new ServerBootstrap
构造NioServerSocketChannelFactory,用来创建NioServerSocketChannel对象(newChannel方 ...
protected char buffer[];
......
@Override
public String toString() {
// Create a copy, don't share the array
String value = new String(this.buffer, 0, count);
if (this.buffer.length <= 1024 * 8) {
bufferLocal.set(new SoftReference<char[]>(this.buffer));
}
t ...
《Linux Performance Analysis and Tools | Linux 性能分析和工具》Brendan Gregg SCaLE 11x 大会上的演讲
英文水平有限,记下来慢慢看
http://joyent.com/blog/linux-performance-analysis-and-tools-brendan-gregg-s-talk-at-scale-11x
幻灯片:
今天想给项目写个远程执行的小工具
1.客户端动态编译要远程执行的代码
2.通过网络将编译好的字节码传输到服务端
3.服务端留一个类装载器的接口
4.对客户端传输过来的字节码做一定修改(复杂了的不好改,修改常量池还是不难实现的,比如需要输出信息到客户端,却又想用System.out输出,修改常量池就好了,不然System.out只能输出在服务端)
5.用自定义的ClassLoader将要执行的类装载到jvm,然后执行,输出信息返回给客户端
这个工具类还是比较强大的(不过也很危险,看怎么用了),可以看到服务端的任何类的变量,也可以执行清除缓存之类的操作。
以前写过这种小玩意儿,不过是在有w ...
昨天应同事要求在框架中(Spring+iBatis2.3.4)加入Batch处理,于是满足之,由于需要更灵活并且不想为批量插入、批量更新、批量删除等操作单独写对应的方法,于是写了这样的一个方法
public Object batchExecute(final CallBack callBack) {
Object result = getSqlMapClientTemplate().execute(new SqlMapClientCallback<Object>() {
@Override
public Object doInSqlMapClie ...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.5.1</version>
<executions>
<execution>
<id>copy</id>
<phase>install< ...
asm是一个java的字节码框架,它能被用来动态生成类或者增强既有类的功能。
一般asm的应用场景主要在aop上,比如Spring在底层就是用了asm,但asm不仅仅是只能在aop方面发挥它强大的能力,比如你现在要写一个rpc框架,可能会 ...
说到Explain,肯定很多读者之前已经用过了,MySQL Query Optimizer 通过执行 EXPLAIN 命令来告诉我们它将使用一个怎样的执行计划来优化Query。所以,可以说 Explain 是在优化 Query 时最直接有效地验证我们想法的工具。在本章前面已经谈到,一个好的 SQL Performance Tuner 在动手优化一个 Query 之前,头脑中就应该已经有了一个好的执行计划,后面的优化工作只是为实现该执行计划而作出的各种调整。
在对某个 Query 优化过程中,须要不断地使用 Explain 来验证各种调整是否有效。就像前面很多示例都会通过 Explain 来验证 ...