自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 收藏
  • 关注

漫谈事务与分布式事务(4)- 最终一致性

在上一篇文章里忽略了一点。 CAP 定理有一个缺陷,这个缺陷可以帮助我们“部分”摆脱 分布式困境。 总的来说,CAP 定理本身是完备的,但它并没有描述一个分布式系统何时产生分区,以及分区会持续多长时间。理论其实只限制:在分区发生的 时间内,系统只能在一致性(C)和可用性(A)之间二选一。 因此,分布式系统完全可以在没有出现分区时保证 C 和 A,而在出现分区后,放弃一些...

2014-04-08 11:20:25 236

漫谈事务与分布式事务(3)- 分布式困境

上一篇介绍了 单机数据库 的 ACID 事务。下面将进入真正的难点: “分布式环境”分布式与单机最大的区别在于:单机是一个整体。组成这台机器的零件要么(看上去)都在正常状态,要么都不在状态,很少有例外。     在单机环境,底层系统(操作系统,HAL,BIOS 以及固件)既不会向软件报告有一个 CPU 或内存被拔出插槽,也不会报告某条系统总线面临堵塞。软件也不需要设计成在...

2014-03-21 17:54:29 158

漫谈事务和分布式事务(2)- 数据库 ACID 的实现

回到事务这个话题。上一篇提到: 数据库事务 = ACID ACID 并不是一个纸面理论。这个世界上有成千上万台满足 ACID 特性的数据库运行在大大小小的机构、政府部门和企业,为各式各样的复杂业务提供服务。其中有银行、电信、统计机构、实验室,以及你正在访问的网站。如果全球的数据库同时崩溃,那也许是一场世界末日,嘭! 让我先烧个香膜拜一下,然后很肤浅的看一下数据库实现 A...

2014-03-12 16:05:23 192

原创 漫谈事务与分布式事务(1)- 理解 ACID

最近看了一点资料,准备写一个大话题。 事务,是所有数据库讲义中最核心的话题。它本质上是一系列连续的,逻辑相关的数据库操作的组合。随便翻开一本书,都会告诉你,事务必须满足下面四个属性: ACID(Atomic,Consistency,Isolation,Durability) 按照属性即实体的观点:数据库事务就是 ACID,符合 ACID 的就是数据库事务。因此我们可...

2014-03-11 18:13:26 317

有关 SoftReference 的一些事实

Java 的 SoftReference 有很多年都没有被人惦记了。在 Javadoc 里, 它的描述是这样: ”虚拟机在抛出 OutOfMemoryError 之前会保证所有的软引用对象已被清除。此外,没有任何约束保证软引用将在某个特定的时间点被清除,或者确定一组不同的软引用对象被清除的顺序。不过,虚拟机的具体实现会倾向于不清除最近创建或最近使用过的软引用。“ 这个类可以直接...

2013-08-12 12:30:52 110

原创 也谈 Python 的中文编码处理

最近业务中需要用 Python 写一些脚本。尽管脚本的交互只是命令行 + 日志输出,但是为了让界面友好些,我还是决定用中文输出日志信息。 很快,我就遇到了异常: UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3: ordinal not in range(128) 为了解决...

2013-05-07 09:30:03 381

原创 Disruptor 2.0 - 所有的改变

这是 Trisha Gee 发表的 Disruptor 全解析系列博客的后续补充,原文链接是:http://mechanitis.blogspot.com/2011/08/disruptor-20-all-change-please.html​ Martin 最近公布了 Disruptor​ 的 2.0 版本​ —— 基本上,2.0 版自我们第一次开源以来有了如此多的改变,是需要把这些...

2013-02-20 15:17:04 161

Disruptor 全解析(7):解密内存屏障(Memory Barrier)

原文地址:http://mechanitis.blogspot.com/2011/08/dissecting-disruptor-why-its-so-fast.html​​, 作者是 Trisha Gee, LMAX 公司的一位女工程师。 我最近写文章的速度变慢了,是因为我一直在尝试写一篇博客解释内存屏障(Memory Barrier)以及它在 Disruptor​ 的应用。问题是...

2013-02-11 00:39:19 491

原创 MySQL 5.6 全局事务 ID(GTID)实现原理(三)

这是 MySQL 5.6 全局事务 ID(GTID) 系列的第三篇博客。 在之前的两篇博客中,第一篇​ 介绍了全局事务 ID 的定义与数据结构。第二篇​ 介绍了 MySQL 5.6 新增的全局事务状态(Gtid_state)。 这里准备介绍的是全局事务 ID 如何参与 MySQL 的主备复制流程。 MySQL 5.6 引入全局事务 ID 的首要目的,是保证 Slave ...

2013-01-16 00:06:57 211

MySQL 5.6 全局事务 ID(GTID)实现原理(二)

前文 MySQL 5.6 全局事务 ID(GTID)实现原理(一)​ 介绍了 MySQL 5.6 全局事务 ID 的定义和相关的数据结构 Gtid_set 与 Sid_map。接下来,这一篇的主要目标是深入了解文章最后提到的全局事务状态 Gtid_state。并且,如果可能 —— 顺便介绍下这些 Gtid_state 在主备复制中的功能: 全局事务状态 Gtid_state ...

2013-01-15 21:58:23 188

MySQL 5.6 全局事务 ID(GTID)实现原理(一)

MySQL 5.6 的新特性之一,是加入了全局事务 ID (GTID) 来强化数据库的主备一致性,故障恢复,以及容错能力。但是,有关 GTID 的作用和原理,在 MySQL 官方网站​ 的文档库中却很少被提到。 随着 MySQL 5.6 的 rc 版本号原来越高(这意味着 MySQL 5.6 向正式发布越来越近),想要全面了解这个神秘功能的需求也越来越急迫。因此,在这篇博客里,我打算从...

2013-01-15 21:55:01 516

原创 Disruptor 全解析(6):为什么它这么快 (二) - 神奇的 cacheline 补齐

原文地址:http://mechanitis.blogspot.com/2011/07/dissecting-disruptor-why-its-so-fast_22.html​, 作者是 Trisha Gee, LMAX 公司的一位女工程师。 我们多次提到了 Mechanical Sympathy (机器协同?) 这个短语,事实上它甚至是Martin 的博客 标题。它的含义与理解底层...

2012-06-29 16:26:11 232

原创 Disruptor 全解析(5):为什么它这么快 (一) - Locks Are Bad

原文地址: http://mechanitis.blogspot.com/2011/07/dissecting-disruptor-why-its-so-fast.html​​,作者是 Trisha Gee, LMAX 公司的一位女工程师。 Martin Fowler 写了一篇非常不错的 文章​,不仅描述了 Disruptor​,还展示了它是如何适配到 LMAX 架构中的。这篇文章揭示了...

2012-06-18 17:07:17 110

原创 Disruptor 全解析(4):依赖关系组装

原文地址:http://mechanitis.blogspot.com/2011/07/dissecting-disruptor-wiring-up.html​ 作者是 Trisha Gee, LMAX 公司的一位女工程师。 现在我已经讲了 RingBuffer​ 本身,如何从它 读取​ 以及如何向它 写入​。 从逻辑上来说,下一件要做的事情就是把所有的知识拼接到在一起。 ...

2012-06-13 16:20:28 136

原创 Disruptor 全解析(2):如何从 Ring Buffer 读取?

原文地址:http://mechanitis.blogspot.com/2011/06/dissecting-disruptor-how-do-i-read-from.html​​  作者是 Trisha Gee, LMAX 公司的一位女工程师。 这是理解 LMAX​ 开发的 Disruptor 模式​ 系列博客的下一篇。 从 上一篇博客​ 我们都明白了什么是 Ring Buff...

2012-06-12 11:57:52 156

原创 Disruptor 全解析(3):写入 Ring Buffer

原文地址:http://mechanitis.blogspot.com/2011/07/dissecting-disruptor-writing-to-ring.html​ 作者是 Trisha Gee, LMAX 公司的一位女工程师。 这是 Disruptor 全方位解析(end-to-end view)中缺少的一章。当心,本文非常长。但是为了让你能连在一起联系上下文的阅读,我还...

2012-06-08 15:49:29 180

原创 Disruptor 全解析(1):Ring Buffer 有什么特别?

原文地址: http://mechanitis.blogspot.com/2011/06/dissecting-disruptor-whats-so-special.html​  作者是 Trisha Gee, LMAX 公司的一位女工程师。 最近我们开源了 LMAX Disruptor​,它是让我们的交易流程变得如此之快的关键。为什么要开源它?因为我们意识到大家对高性能编程的传统认知...

2012-06-08 15:41:36 622

原创 从一个 JDK6 BUG 看 JAVA 数组创建

前几天在调试一段程序, 奇怪的发现: 程序性能和缓存大小是负相关的——缓存开越大,程序越慢,最快和最慢之间差 2 个数量级。开 jprofiler 查了下,发现了 JDK6 里有这样一段代码 (版本 build 1.6.0_14-b08):红线里的部分只能用笔误来形容 ——Arrays.copyOf() 复制了我传递的整个缓存——在我的测试里,当缓存大小是 8KB 时,复制大约需...

2012-06-08 15:30:51 146

原创 Beanstalkd 介绍

Beanstalkd 是最近出现的一个轻量级消息中间件,他的最大特点是将自己定位为基于管道  (tube) 和任务 (job) 的工作队列 (work-queue): “(Beanstalkd) is a simple, fast workqueue service. Its interface is generic, but was originally designed for r...

2012-02-06 22:47:42 189

原创 Sun 微博 Slynkr 部署记录

前几个月试图将 Sun 为 GlassFish 平台定制的 Web 2.0 微博 Slynkr 部署到 Tomcat6 上,结果完全彻底败给 Sun 了, 下面是全纪录: 1) 自信满满的从 Sun 网站下载了 slynkr.war  在 MySQL 创建 db slynkrdb. 2) 拷贝 slynkr.war 到 $tomcat6/webapps/ 目录, 进入 http:/...

2010-09-01 12:42:53 135

取得 WinNT/2000 下的用户名

取得 WinNT/2000 下的用户名 // 取得当前用户的 TokenHANDLE hToken = NULL;OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken);// 获取 Token InformationDWORD dwReturned = 0;GetTokenInformation...

2009-07-24 13:50:44 73

实现 Rundll.exe 功能的简单代码

实现 Rundll.exe 的功能,代码很简单: #include "stdafx.h"#include <tchar.h>#include <windows.h>#include <iostream.h>int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]){ HMOD...

2009-07-24 13:20:08 113

利用 AttachThreadInput 改变其它进程的输入法状态

利用 AttachThreadInput 和 WM_INPUTLANGCHANGEREQUEST 消息改变其它进程的输入状态 众所周知,通过 ActivateKeyboardLayout 函数可以改变当前线程的输入法状态,不过最近发现通过 AttachThreadInput 和 WM_INPUTLANGCHANGEREQUEST 连用可以改变任意进程内线程的输入法状态,代码如下: ...

2009-07-24 13:10:11 235

Squid 2.6 STABLE 6 配置与管理指南

Squid 2.6 STABLE 6 配置与管理指南 [Squid 是什么]Squid 是 Unix/Linux 服务器上最常用的代理服务器,它也有 Windows 的版本。可以用 Squid 简单的配置一个代理服务器,以实现: 1) 匿名或需要认证的 Internet 代理服务器。2) 局域网内的代理服务器,用来共享 Internet 连接。3) 反向代理,用来加速网...

2009-07-24 13:03:49 260

抓取 Direct3D 图像到 GDI 位图

比较简单, 下面直接贴代码了: // IDirect3DDevice8* pDevice;// RECT rcScreen; // = {0, 0, 1024, 768}; // HDC hdc;// HBITMAP hbitmap;// 忽略返回值检查,应该按需要加入错误处理IDirect3DSurface8* pfb;pDevice->CreateIm...

2009-07-24 12:54:47 151

原创 利用 SHELL 的 ITaskbarList 接口控制 TaskBar 图标

Shell 的 ITaskbarList 接口在 VC6.0 中没有定义,下面给出它的定义:[code="cpp"]#include #include DECLARE_INTERFACE_(ITaskbarList, IUnknown) { STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj...

2009-07-24 12:51:59 244

模拟信号量及 PV 原语的实现

信号量是最早出现的用来解决进程同步与互斥问题的机制,包括一个称为信号量的变量及对它进行的PV原语操作。 实际上 Windows 系统提供了 Semaphore 内核对象实现信号量及 PV 操作, 其 P 操作相当于 WaitForSingleObject(hSemaphore, INFINITE),  V 操作相当于 ReleaseSemaphore(hSemaphore, 1, NULL...

2009-07-24 12:47:19 775

在 Win32 Application 中使用 MFC

在Virtual C++ 6.0创建的Win32 Application 和 Win32 Console Application 中使用 MFC 是可能的,主要的困难在于绕过MFC提供的WinMain函数。下面我提供一个方法以供参考: ...

2009-06-06 00:16:37 72

Hello World by Microsoft Speech SDK 5.1

刚刚从 Microsoft 网站下栽了 Speech SDK 5.1 和中日文发声补丁,参考 Speech SDK文档写了几个小程序,尽管我也是刚刚接触 Speech若干小时的初学者,还是拿出来共享吧: Speech SDK 采用 COM 的形式封装,和大多数COM对象一样,下面是一个似曾相...

2003-07-04 09:20:00 124

浅谈 MFC 的子类化机制和该机制的一个应用(2)

续: 浅谈MFC的子类化机制和该机制的一个应用(1) BOOL CDumpMsgBox::OnDumpOut(LPSTR pszDumpBuffer, UINT nBufferSize){ ASSERT(pszDumpBuffer != NULL &a...

2003-07-03 15:59:00 106

浅谈 MFC 的子类化机制和该机制的一个应用(1)

浅谈 MFC 的子类化机制和该机制的一个应用众所周知:afx_msg int CWnd::OnCreate( LPCREATESTRUCT lpCreateStruct ); 是一个经常被重载的 MFC 窗体函数,他负责处理窗体的 WM_CREATE 消息,这个消息的发送时机在窗体刚刚创建以后,CreateWindow(...

2003-07-03 15:51:00 97

空空如也

空空如也

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

TA关注的人

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