Disruptor原理探讨】的更多相关文章

之前谈到了在我的项目里用到了Disruptor,因为对它了解不足的原因,才会引发之前的问题,因此,今天特意来探讨其原理. 为什么采用Disruptor 先介绍一下我的这个服务.这个服务主要是作为游戏服务器的游戏逻辑部分,包括帧同步逻辑及其他在游戏过程中玩家产生的一些业务逻辑. 从用户量来说,现在最高峰大概有300人同时在线,游戏服务器设置1秒有30帧的数据量,因此,1秒内服务器接收到的请求量为30 * 300 = 9000. 虽然QPS并不是很高,但对于多人对抗竞技类游戏而言,低延迟十分重要,每…
目录 目录 一 引子 二 故障分析 三 故障解决 四 原理探讨 五 小结 文/温国兵 一 引子 研发反应,有台从库和主库不同步.由于业务读操作是针对从库的,数据不同步必定会带来数据的不一致,业务获取的结果会受影响,所以这个问题必须尽快解决. 登上服务器,查看 MySQL 的从库状态,并没有任何报错信息.刷新从库状态,发现状态没有任何变化,Exec_Master_Log_Pos 卡住不动. 二 故障分析 为了安全起见,此文略去 MySQL 版本以及其他可能会带来安全问题的信息. 接下来逐步分析问题…
http://mechanitis.blogspot.com/search/label/disruptor http://ifeve.com/disruptor/, 并发框架Disruptor译文 http://blog.sina.com.cn/s/blog_68ffc7a4010150yl.html, 论文译文   LMAX需要搭建high performance的交易平台, 所以需要基于并发编程模型 (并发编程模型和访问控制) 当然他们也关注类似Actor或SEDA模型, 并进行了测试, 从…
Java的HashMap源码中用到的(n-1)&hash这样的运算,查找发现这是一种高效的求余数的办法,但其中的原理是什么呢为什么可以这么做呢? 先上结论:假设被除数是x,对于除数是2n的取余操作x%2n,都可以写成x&(2n-1),位运算效率高! eg:%=&= &== 网上对这个原因的解释都是模糊不清,下面是我对于这个等式为什么成立的一些理解. 就拿上面这个259%8进行举例. 259的二进制为100000011,8的二进制为1000. 假如对8进行取余,那么只需要留下…
volatile的定义 Java语言规范第3版中对volatile的定义如下:Java编程语言允许线程访问共享变量,为了确保共享变量能被准确和一致地更新,线程应该确保通过排他锁单独获得这个变量.Java语言提供了volatile,在某些情况下比锁要更加方便.如果一个字段被声明成volatile,Java线程内存模型确保所有线程看到这个变量的值是一致的. 在多线程并发编程中synchronized和volatile都扮演着重要的角色,volatile是轻量级的synchronized,它在多处理器…
一.网络中进程之间如何通信? 本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类: 1.消息传递(管道.FIFO.消息队列) 2.同步(互斥量.条件变量.读写锁.文件和写记录锁.信号量) 3.共享内存(匿名的和具名的) 4.远程过程调用(Solaris门和Sun RPC) 但这些都不是本文的主题!我们要讨论的是网络中进程之间如何通信?首要解决的问题是如何唯一标识一个进程,否则通信无从谈起!在本地可以通过进程PID来唯一标识一个进程,但是在网络中这是行不通的.其实TCP/IP协议族已经帮…
http://www.cnblogs.com/xufeiyang/articles/4878096.html http://www.cnblogs.com/xufeiyang/articles/4533882.html http://www.cnblogs.com/xufeiyang/articles/5010717.html…
1 复制概述 1.1.复制解决的问题 数据复制技术有以下一些特点: (1) 数据分布 (2) 负载平衡(load balancing) (3) 备份 (4) 高可用性(high availability)和容错 1.2.复制如何工作 从高层来看,复制分成三步: (1) master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events): 关于二进制日志更多内容,请参考MySQL知识总结(四)二进制日志 (2) slave将master的…
MyDisruptor V5版本介绍 在v4版本的MyDisruptor实现多线程生产者后.按照计划,v5版本的MyDisruptor需要支持更便于用户使用的DSL风格的API. 由于该文属于系列博客的一部分,需要先对之前的博客内容有所了解才能更好地理解本篇博客 v1版本博客:从零开始实现lmax-Disruptor队列(一)RingBuffer与单生产者.单消费者工作原理解析 v2版本博客:从零开始实现lmax-Disruptor队列(二)多消费者.消费者组间消费依赖原理解析 v3版本博客:从…
将系统性能优化到极致,永远是程序爱好者所努力的一个方向.在java并发领域,也有很多的实践与创新,小到乐观锁.CAS,大到netty线程模型.纤程Quasar.kilim等.Disruptor是一个轻量的高性能并发框架,以惊人的吞吐量而受到广泛的关注.Disruptor为提高程序的并发性能,提供了很多新的思路,比如: 缓存行填充,消除伪共享: RingBuffer无锁队列设计: 预分配缓存对象,使用缓存的循环覆盖取代缓存的新增删除等: 下文将从源码角度解析Disruptor的实现原理. 1 Di…
原文地址:Concurrency with LMAX Disruptor – An Introduction 译者序 前些天在并发编程网,看到了关于 Disruptor 的介绍.感觉此框架惊为天人,值得学习学习.在把并发编程网上面介绍逐一浏览之后发觉,缺少了对于 Disruptor 基础应用的介绍.于是就有了翻译海外基础介绍的想法. 首先 要为以后难以在工作中用到 Disruptor 而感到沮丧.因为据介绍来看,它号称"能够在一个线程里每秒处理6百万订单" .我所在的平台撑不起这个量,…
刚刚听说disruptor,大概理一下,只为方便自己理解,文末是一些自己认为比较好的博文,如果有需要的同学可以参考. 本文目标:快速了解Disruptor是什么,主要概念,怎么用 1.Disruptor简介 Disruptor是什么?有什么特点/优点? --Disruptor是一个用于在线程间通信的高效低延时的消息组件,它像个增强的队列. --它是一个高性能.低延迟.使用简单的异步处理框架,或者可以认为是最快的消息框架(轻量的JMS),也可以认为是一个观察者模式实现,或者事件-监听模式的实现,直…
文章转自:http://www.wzsky.net/html/Program/DataBase/74799.html 近期来,FreeList的重要作用逐渐为Oracle DBA所认识,网上也出现一些相关的讨论.本文以FreeList为线索对Oracle的存储管理的原理进行较深入的探讨,涉及Oracle段区块管理的 原理,FreeList算法等.而与FreeList密切相关的一个重用特性HWM,与sql性能密切相关,本文也作了原理分析介绍.在原理探讨的基础 上,介绍了常用的存储参数分析方法,并对…
这篇文章目的是介绍如何创建一个ESLint插件和创建一个ESLint rule,用以帮助我们更深入的理解ESLint的运行原理,并且在有必要时可以根据需求创建出一个完美满足自己需求的Lint规则. 插件目标 禁止项目中setTimeout的第二个参数是数字. PS: 如果是数字的话,很容易就成为魔鬼数字,没有人知道为什么是这个数字, 这个数字有什么含义. 使用模板初始化项目: 1. 安装NPM包 ESLint官方为了方便开发者开发插件,提供了使用Yeoman模板(generator-eslint…
本文翻译自Disruptor在github上的wiki文章Introduction,原文可以看这里. 一.前言 作为程序猿大多数都有对技术的执着,想在这个方面有所提升.对于优秀的事物保持积极学习的心态,并发编程是开发中一大难题,无论是底层的各种理论还是上层的各种关于并发组件的实现,都非常的晦涩难懂.并发之所以难,就是因为"多"而难以控制.大多数都会使用"锁"这种技术进行控制,但是"锁"这种技术往往和性能又是背道而驰.为了能够将性能最大化,无锁 去…
最近小组准备启动一个 node 开源项目,从前端亲和力.大数据下的IO性能.可扩展性几点入手挑选了 NoSql 数据库,但具体使用哪一款产品还需要做一次选型. 我们最终把选项范围缩窄在 HBase.Redis.MongoDB.Couchbase.LevelDB 五款较主流的数据库产品中,本文将主要对它们进行分析对比. 鉴于缺乏项目中的实战经验沉淀,本文内容和观点主要还是从各平台资料搜罗汇总,也不会有太多深入或底层原理探讨. 本文所引用的资料来源将示于本文尾部.所汇总的内容仅供参考,若有异议望指正…
题目来自http://www.codeceo.com/article/201-java-interview-qa.html,答案自己网上找的,如有疏漏,欢迎斧正.一起学习,共同进步. 一.Java基础 1. String类为什么是final的. 2. HashMap的源码,实现原理,底层结构. 3. 说说你知道的几个Java集合类:list.set.queue.map实现类咯. 4. 描述一下ArrayList和LinkedList各自实现和区别. 5. Java中的队列都有哪些,有什么区别.…
Disruptor-NET算法(是一种无锁算法)需要我们自己实现某一种特定的内存操作的语义以保证算法的正确性.这时我们就需要显式的使用一些指令来控制内存操作指令的顺序以及其可见性定义.这种指令称为内存栅栏. 内存一致性模型需要在各种的程序与系统的各个层次上定义内存访问的行为.在机器码与的层次上,其定义将影响硬件的设计者以及机器码开发人员:而在高级语言层次上,其定义将影响高级语言开发人员以及编译器开发人员和硬件设计人员.即,内存操作的乱序在各个层次都是存在的.这里,所谓的程序的执行顺序有三种: (…
Disruptor 介绍 Disruptor 是LMX开源出来的java编写的一个并发消息处理器,在队列中一边生产者放入消息,另外一边消费者并行取出处理,其核心是根据现代CPU硬件缓存特点发明不同于通用LinkedList或Queue的新型数据结构RingBuffer LMX 系统每秒处理600万订单,这是个神话!,其业务模式是:In Memory+Event Source+Disruptor Disruptor 框架解决了锁,伪共享带来的性能影响 为什么队列干扰了缓存呢?解释是这样的: 为了将…
最近小组准备启动一个 node 开源项目,从前端亲和力.大数据下的IO性能.可扩展性几点入手挑选了 NoSql 数据库,但具体使用哪一款产品还需要做一次选型. 我们最终把选项范围缩窄在 HBase.Redis.MongoDB.Couchbase.LevelDB 五款较主流的数据库产品中,本文将主要对它们进行分析对比. 鉴于缺乏项目中的实战经验沉淀,本文内容和观点主要还是从各平台资料搜罗汇总,也不会有太多深入或底层原理探讨. 本文所引用的资料来源将示于本文尾部.所汇总的内容仅供参考,若有异议望指正…
因系统要兼容原IE已使用的关闭方法,经调试测得,需对window.dialogArguments进行再较验,不然易出问题. function OKEnd(vals) { if (vals == null) vals = "TRUE"; if (typeof (window.opener) == "undefined") { if (typeof (window.dialogArguments) != "undefined") { if (wind…
day01XML上    1.XML的作用    2.XML的基本语法    3.DTD约束    4.DTD的基本语法(看懂DTD就ok)    5.XML的解析方式:原理    6.JAXP的DOM方式解析基本练习    7.JAXP的DOM方式解析案例day02XML下    1.JAXP进行DOM解析的案例做完    2.JAXP进行SAX解析的原理和实际应用    3.DOm4J简介和基本练习    4.Junit单元测试    5.Xpath    6.Dom4J改写原有的案例  …
子类化,通俗来讲就是用自己的窗口处理函数来处理特定消息,并将自己其他消息还给标准(默认)窗口处理函数.在SDK中,通过SetWindowLong来指定一个自定义窗口处理函数:SetWindowLong(hwnd, GWL_WNDPROC, (LONG)UserWndProc);.可是到了MFC中,大部分基础的东西都被封装起来了,那么,这是该怎么实现子类化呢?       先来看一个例子:       要求:定义一个Edit控件,让它能够对输入进行特定的处理输入进行处理-----只能输入英文字母,…
几款主流 NoSql 数据库的对比 posted @ 2016-05-11 21:36 vajoy 阅读(915) 评论(3) 编辑 收藏   最近小组准备启动一个 node 开源项目,从前端亲和力.大数据下的IO性能.可扩展性几点入手挑选了 NoSql 数据库,但具体使用哪一款产品还需要做一次选型. 我们最终把选项范围缩窄在 HBase.Redis.MongoDB.Couchbase.LevelDB 五款较主流的数据库产品中,本文将主要对它们进行分析对比. 鉴于缺乏项目中的实战经验沉淀,本文内…
        经过近两年的不懈努力,笔者的原创教程"ActionScript3游戏中的图像编程"最终在今日划上了完美的句号!这其中记录着笔者多年来在游戏制作,尤其是其中图像处理方面的经验心得.尽管使用的语言是眼下可能正在没落的ActionScript3.0,但因为其中渗透着深刻的编程思想和有用技巧,因此其意义已经远远超越了ActionScript本身.您能够把从本教程学到的知识轻松移植到其它支持图像编程的开发语言中(我也想换个语言重写,可惜精力不足).         此外,本教程还…
一.前言     上一篇说了一下查询和存储机制,接下来我们主要来说一下排序.聚合.分页: 写完文章以后发现之前文章没有介绍Coordinating Node,这个地方补充说明下Coordinating Node(协调节点):搜索请求或索引请求可能涉及保存在不同数据节点上的数据.例如,搜索请求在两个阶段中执行,当客户端请求到节点上这个阶段的时候,协调节点将请求转发到保存数据的数据节点.每个数据节点在分片执行请求并将其结果返回给协调节点.当节点返回到客端这个阶段的时候,协调节点将每个数据节点的结果减…
转自:http://www.cnblogs.com/vajoy/p/5471308.html 最近小组准备启动一个 node 开源项目,从前端亲和力.大数据下的IO性能.可扩展性几点入手挑选了 NoSql 数据库,但具体使用哪一款产品还需要做一次选型. 我们最终把选项范围缩窄在 HBase.Redis.MongoDB.Couchbase.LevelDB 五款较主流的数据库产品中,本文将主要对它们进行分析对比. 鉴于缺乏项目中的实战经验沉淀,本文内容和观点主要还是从各平台资料搜罗汇总,也不会有太多…
一.JAVA中正则表达式相关的类 1. java.util.regex.Pattern 该类用于编译模式,模式可以理解为一个正则表达式,比如:a*b. 用法如下: // 创建模式 Pattern p = Pattern.compile("a*b"); // 创建该模式的匹配器 Matcher m = p.matcher("aaaaab"); 2. java.util.regex.Matcher 该类用于创建匹配器和进行匹配操作. 用法如下: // 进行匹配操作 bo…
与iOS相比.Android最被人诟病的是其流畅性和安全性. 然而,从4.0開始,Android不遗余力地改善其流畅性. 特别是在即将公布的L版本号中,用ART替换了Dalvik,相信会越来越流畅.至于安全性,Android也没有遗忘. 从4.3開始,Android引入了一套基于SELinux的安全机制,称为SEAndroid,来加强系统安全性.接下来我们就对SEAndroid进行简要介绍和制定学习计划. 老罗的新浪微博:http://weibo.com/shengyangluo.欢迎关注! 在…
整理和翻新一下自己看过和笔记过的Big Data相关的论文和Blog Streaming & Spark In-Stream Big Data Processing Discretized Streams, 离散化的流数据处理 Spark - A Fault-Tolerant Abstraction for In-Memory Cluster Computing Mesos: A Platform for Fine-Grained Resource Sharing in the Data Cen…