随笔分类 -  并行编程

摘要:转载自http://www.infoq.com/cn/articles/netty-high-performance 1. 背景 1.1. 惊人的性能数据 最近一个圈内朋友通过私信告诉我,通过使用Netty4 + Thrift压缩二进制编解码技术,他们实现了10W TPS(1K的复杂POJO对象)的跨节点远程服务调用。相比于传统基于Java序列化+BIO(同步阻塞IO)的通信框架,性能提升了8倍多... 阅读全文
posted @ 2016-07-02 13:43 Binhua Liu 阅读(2143) 评论(0) 推荐(0) 编辑
摘要:在我的前一篇文章中, 我们演示了在Java 8中,可以采用@Contended在类级别上的注释,来进行缓存行填充。这样,多线程情况下的伪共享冲突问题。 感兴趣的同学可以查看该文。 其实,@Contended注释还可以应用于字段级别(Field-Level),当应用于字段级别时,被注释的字段将和其他字段隔离开来,会被加载在独立的缓存行上。在字段级别上,@Contended还支持一个“conten... 阅读全文
posted @ 2016-06-28 14:04 Binhua Liu 阅读(11027) 评论(2) 推荐(5) 编辑
摘要:关于伪共享的文章已经很多了,对于多线程编程来说,特别是多线程处理列表和数组的时候,要非常注意伪共享的问题。否则不仅无法发挥多线程的优势,还可能比单线程性能还差。随着JAVA版本的更新,再各个版本上减少伪共享的做法都有区别,一不小心代码可能就失效了,要注意进行测试。这篇文章总结一下。 什么是伪共享 关 阅读全文
posted @ 2016-06-27 17:52 Binhua Liu 阅读(15499) 评论(5) 推荐(9) 编辑
摘要:英文原文:Micro Benchmarking with JMH: Measure, don’t guess!翻译地址:使用JMH进行微基准测试:不要猜,要测试!原文作者:Antonio翻译作者:Hollis转载请注明出处。 很多Java开发人员都知道把一个变量声明为null有助于垃圾回收(译者注:一般而言,为null的对象都会被作为垃圾处理,所以将不用的对象显式地设为Null,有利于GC... 阅读全文
posted @ 2016-06-26 15:54 Binhua Liu 阅读(4354) 评论(0) 推荐(0) 编辑
摘要:最近架构一个项目,实现行情的接入和分发,需要达到极致的低时延特性,这对于证券系统是非常重要的。接入的行情源是可以配置,既可以是Level-1,也可以是Level-2或其他第三方的源。虽然Level-1行情没有Level-2快,但是作为系统支持的行情源,我们还是需要优化它,使得从文件读取,到用户通过socket收到行情,端到端的时延尽可能的低。本文主要介绍对level-1行情dbf文件读取的极致优化... 阅读全文
posted @ 2016-06-26 07:13 Binhua Liu 阅读(5613) 评论(5) 推荐(5) 编辑
摘要:最近架构一个项目,实现行情的接入和分发,需要达到极致的低时延特性,这对于证券系统是非常重要的。接入的行情源是可以配置,既可以是Level-1,也可以是Level-2或其他第三方的源。虽然Level-1行情没有Level-2快,但是作为系统支持的行情源,我们还是需要优化它,使得从文件读取,到用户通过socket收到行情,端到端的时延尽可能的低。本文主要介绍对level-1行情dbf文件读取的极致优化... 阅读全文
posted @ 2016-06-25 09:40 Binhua Liu 阅读(5302) 评论(0) 推荐(4) 编辑
摘要:最近架构一个项目,实现行情的接入和分发,需要达到极致的低时延特性,这对于证券系统是非常重要的。接入的行情源是可以配置,既可以是Level-1,也可以是Level-2或其他第三方的源。虽然Level-1行情没有Level-2快,但是作为系统支持的行情源,我们还是需要优化它,使得从文件读取,到用户通过socket收到行情,端到端的时延尽可能的低。本文主要介绍对level-1行情dbf文件读取的极致优化... 阅读全文
posted @ 2016-06-23 12:16 Binhua Liu 阅读(9129) 评论(4) 推荐(7) 编辑
摘要:简介 提供了一个基于FIFO队列,可以用于构建锁或者其他相关同步装置的基础框架。该同步器(以下简称同步器)利用了一个int来表示状态,期望它能够成为实现大部分同步需求的基础。使用的方法是继承,子类通过继承同步器并需要实现它的方法来管理其状态,管理的方式就是通过类似acquire和release的方式来操纵状态。然而多线程环境中对状态的操纵必须确保原子性,因此子类对于状态的把握,需要使用这个同步器提... 阅读全文
posted @ 2016-06-16 18:06 Binhua Liu 阅读(3640) 评论(0) 推荐(0) 编辑
摘要:Protobuf序列化的字节流数据是不能自描述的,当我们通过socket把数据发送到Client时,Client必须知道发送的是什么类型的数据,才能正确的反序列化它。这严重影响限制了C/S功能的实现,不解决的话信道事实上只能传输一种类型的数据。本文讲解一下我用的解决办法,虽然我觉得应该有官方的实现更 阅读全文
posted @ 2016-06-12 15:09 Binhua Liu 阅读(40558) 评论(6) 推荐(10) 编辑
摘要:很多的同学很少使用、或者干脆不了解不可变类(Immutable Class)。直观上很容易认为Immutable类效率不高,或者难以理解他的使用场景。其实不可变类是非常有用的,可以提高并行编程的效率和优化设计。让我们跳过一些宽泛的介绍,从一个常见的并行编程场景说起: 假设系统需要实时地处理大量的订单,这些订单的处理依赖于用户的配置,例如用户的会员级别、支付方式等。程序需要通过这些配置的参数... 阅读全文
posted @ 2016-06-11 16:38 Binhua Liu 阅读(14984) 评论(7) 推荐(14) 编辑
摘要:1, substring截取超大字符串可能造成的“内存泄漏” 2,+ 操作符的优化和局限 3,StringBuilder和StringBuffer 4,split和StringTokenizer做简单字符分割效率的比较 1, substring截取超大字符串可能造成的“内存泄漏” 我们知道,Stri 阅读全文
posted @ 2016-06-09 15:00 Binhua Liu 阅读(9035) 评论(3) 推荐(5) 编辑
摘要:已经有不少文章介绍使用tomcat-redis-session-manager来实现Redis存储Tomcat的Session,实现分布式Session管理。但是现在官方编译的tomcat-redis-session-manager的jar包已经很旧了,基于的Redis版本也很低。这里我把我自己重新编译并部署它的步骤介绍一下。 1,首先,从Github上clone下载tomcat-redi... 阅读全文
posted @ 2016-06-05 16:11 Binhua Liu 阅读(10587) 评论(4) 推荐(7) 编辑
摘要:翻译前言:感觉作者有点夸夸其谈兼絮絮叨叨,但文章还是很有用的。原文《An Overview of Complex Event Processing》 复杂事件处理技术概览(一) 用户用例:客户问题的解决方案 所以,现在如何使用复杂事件处理平台来解决业务问题?毫无疑问,在过去的几年中,这一技术被在大多数的-- 如果不是全部的--不同类型的行业。 金融服务资本市场公司都采用这种技术作为实... 阅读全文
posted @ 2016-03-29 18:02 Binhua Liu 阅读(1958) 评论(0) 推荐(0) 编辑
摘要:翻译前言:我在理解复杂事件处理(CEP)方面一直有这样的困惑--为什么这种计算模式是有效的,能够分析得到有用的结果?为什么它会快?我始终还没有找到我期望的答案。不像map-reduce模型,google的论文非常清楚的描述了它的场景;或者disruptor框架,原作者清晰地解释了它为什么会快。在试图理解CEP的过程中,我准备翻译一些我认为有启发性的文章,希望也对大家有用。这篇文章的原文《An ... 阅读全文
posted @ 2016-03-27 12:32 Binhua Liu 阅读(5350) 评论(0) 推荐(0) 编辑
摘要:使用Netty编程时,我们经常会从用户线程,而不是Netty线程池发起write操作,因为我们不能在netty的事件回调中做大量耗时操作。那么问题来了 – 1, writeAndFlush是线程安全的吗? 2, 是否使用了锁,导致并发性能下降呢 我们来看代码 – 在DefaultChannelHan 阅读全文
posted @ 2016-03-19 15:40 Binhua Liu 阅读(13673) 评论(1) 推荐(3) 编辑

点击右上角即可分享
微信分享提示