MySQL 异步驱动浅析 (一):性能分析 - Scala Cool 

作者:JerryXia | 发表于 , 阅读 (0)
项目设计目标项目官网设计目标如下
快、快、更快低内存开销尽量避免内存拷贝(也是为了更快,更节约内存)易于使用,调用方法,返回 Future从不阻塞所有功能都被测试覆盖很小的依赖可以看出作者是希望通过异步非阻塞能让驱动更快(注意此处我们不讨论是真异步或者伪异步)。接下来本文将具体分析与传统的 mysql-connector/j 相比究竟是不是更快,快在哪里。
网络 IOMysqlAsync 的 IO项目使用 Netty 的 NIO 来实现,在网络 IO 这一点上确实是非阻塞的。协议实现过程也没用使用 synchronized 和 LockNetty 默认情况下线程数为 CPU 核数2倍Mysql JDBC 驱动 的 IOmysql-connector/j 使用的还是 Blocking IO ,这要求处理请求时必需有足够多的线程,否则吞吐量将受很大限制。
例如同样基于 Blocking IO 的 Tomcat7 默认就配置了 200 线程。
连接池MysqlAsync 的链接池
项目还提供一个连接池,采用分区设计,一个 PartitionedAsyncObjectPool 包含多...阅读全文

  Scala 类型的类型(二) - Scala Cool 

作者:JerryXia | 发表于 , 阅读 (0)
上一篇Scala 类型的类型(一)
目录6. 一个单例对象的类型7. Scala 中的型变8. Refined Types (refinements)9. 包对象10. 类型别名6. 一个单例对象的类型Scala 的单例对象( object) 是通过 class 实现的(显然后者就像 JVM 的基础构件)。然而你也会发现我们并不能像一个简单的类一样,轻松地获得一个单例对象的类型……
我常常疑惑该如何传一个单例对象给一个方法,对此我自己也非常惊讶。我的意思是指 obj: ExampleObj 是无效的,因为这种情况 ExampleObj 已经指向了实例,所以它有个 type 的成员,我们可以靠它解决问题。
下面的代码解释了大概的方法:12345object ExampleObjdef takeAnObject(obj: ExampleObj.type) = {}takeAnObject(ExampleObj)
...阅读全文

 Akka 系列(四):Akka 中的共享内存模型 - Scala Cool 

作者:JerryXia | 发表于 , 阅读 (0)
通过前几篇的学习,相信大家对Akka应该有所了解了,都说解决并发哪家强,JVM上面找Akka,那么Akka到底在解决并发问题上帮我们做了什么呢?
共享内存众所周知,在处理并发问题上面,最核心的一部分就是如何处理共享内存,很多时候我们都需要花费很多时间和精力在共享内存上,那么在学习Akka对共享内存是如何管理之前,我们先来看看Java中是怎么处理这个问题的。
Java共享内存相信对Java并发有所了解的同学都应该知道在Java5推出JSR 133后,Java对内存管理有了更高标准的规范了,这使我们开发并发程序也有更好的标准了,不会有一些模糊的定义导致的无法确定的错误。
首先来看看一下Java内存模型的简单构图:

从图中我们可以看到我们线程都有自己的一个工作内存,这就好比高速缓存,它是对主内存部分数据的拷贝,线程对自己工作内存的操作速度远远快于对主内存的操作,但这也往往会引起共享变量不一致的问题,比如以下一个场景:
1234int a = 0;public void setA() {  a = a + 1;}上面是一个很简单的例子,a是一个全局变量,然后我们有一个方法去修改这...阅读全文