`
in355hz
  • 浏览: 229890 次
社区版块
存档分类
最新评论
文章列表
原文地址:http://mechanitis.blogspot.com/2011/07/dissecting-disruptor-writing-to-ring.html​ 作者是 Trisha Gee, LMAX 公司的一位女工程师。   这是 Disruptor 全方位解析(end-to-end view)中缺少的一章。当心,本文非常长。但是为了让你能连在一起联系上下文的阅读,我还是决定把它们写进一篇博客里。   本文的 重点 是:不要让 Ring 重叠;如何通知消费者;生产者一端的批处理;以及多个生产者如何协同工作。  
原文地址: http://mechanitis.blogspot.com/2011/06/dissecting-disruptor-whats-so-special.html​  作者是 Trisha Gee, LMAX 公司的一位女工程师。   最近我们开源了 LMAX Disruptor​,它是让我们的交易流程变得如此之快的关键。为什么要开源它?因为我们意识到大家对高性能编程的传统认知 ... 有些不对劲。我们找到了一个更好的,更快的在线程间共享数据的方法,如果不把它分享给大家就太自私了。而且,这会使我们看起来很酷。 从这个 网站​ 你可以下载一份解释什么是 Disruptor, ...
前几天在调试一段程序, 奇怪的发现: 程序性能和缓存大小是负相关的——缓存开越大,程序越慢,最快和最慢之间差 2 个数量级。开 jprofiler 查了下,发现了 JDK6 里有这样一段代码 (版本 build 1.6.0_14-b08): 红线里的部分只能用笔误来形容 ——Arrays.copyOf() 复制了我传递的整个缓存——在我的测试里,当缓存大小是 8KB 时,复制大约需要 3000ns,而缓存大小是 64KB 时,复制需要 21000ns. 显然,使得 Arrays.copyOf 很慢的原因是每次创建新数组,造成 CPU cache 利用率不高,下面来证 ...
Beanstalkd 是最近出现的一个轻量级消息中间件,他的最大特点是将自己定位为基于管道  (tube) 和任务 (job) 的工作队列 (work-queue):   “(Beanstalkd) is a simple, fast workqueue service. Its interface is generic, but was originally designed for reducing the ...
前几个月试图将 Sun 为 GlassFish 平台定制的 Web 2.0 微博 Slynkr 部署到 Tomcat6 上,结果完全彻底败给 Sun 了, 下面是全纪录:   1) 自信满满的从 Sun 网站下载了 slynkr.war  在 MySQL 创建 db slynkrdb.   2) 拷贝 slynkr.war 到 $tomcat6/webapps/ 目录, 进入 http://localhost:8080/slynkr/       提示无法获取 java:comp/env/jdbc/slynkr_datasource 数据源;   3) 在 $tomcat6/co ...
取得 WinNT/2000 下的用户名   // 取得当前用户的 Token HANDLE hToken = NULL; OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken); // 获取 Token Information DWORD dwReturned = 0; GetTokenInformation(hToken, TokenOwner, NULL, 0, &dwReturned); LPVOID pvOwner = new BYTE[dwReturned]; GetTokenIn ...
实现 Rundll.exe 的功能,代码很简单:   #include "stdafx.h" #include <tchar.h> #include <windows.h> #include <iostream.h> int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]) { HMODULE hModule; LPVOID lpvfn; if (argc < 3) { cout << &quo ...
利用 AttachThreadInput 和 WM_INPUTLANGCHANGEREQUEST 消息改变其它进程的输入状态   众所周知,通过 ActivateKeyboardLayout 函数可以改变当前线程的输入法状态,不过最近发现通过 AttachThreadInput 和 WM_INPUTLANGCHANGEREQUEST 连用可以改变任意进程内线程的输入法状态,代码如下:   以下代码通过 GetKeyboardLayoutList 取得首选的中文输入法的 HKL(Keybroad Layout Handle):   HKL g_hklRPC = NULL; BOO ...
Squid 2.6 STABLE 6 配置与管理指南   [Squid 是什么] Squid 是 Unix/Linux 服务器上最常用的代理服务器,它也有 Windows 的版本。可以用 Squid 简单的配置一个代理服务器,以实现:   1) 匿名或需要认证的 Internet 代理服务器。 2) 局域网 ...
比较简单, 下面直接贴代码了:   // IDirect3DDevice8* pDevice; // RECT rcScreen; // = {0, 0, 1024, 768}; // HDC hdc; // HBITMAP hbitmap; // 忽略返回值检查,应该按需要加入错误处理 IDirect3DSurface8* pfb; pDevice->CreateImageSurface(rcScreen.right, rcScreen.bottom, D3DFMT_A8R8G8B8, &pfb); pDevice->GetFrontBuffer(p ...
Shell 的 ITaskbarList 接口在 VC6.0 中没有定义,下面给出它的定义: #include <objbase.h> #include <shlobj.h> DECLARE_INTERFACE_(ITaskbarList, IUnknown) { STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)( ...
信号量是最早出现的用来解决进程同步与互斥问题的机制,包括一个称为信号量的变量及对它进行的PV原语操作。   实际上 Windows 系统提供了 Semaphore 内核对象实现信号量及 PV 操作, 其 P 操作相当于 WaitForSingleObject(hSemaphore, INFINITE),  V 操作相当于 ReleaseSemaphore(hSemaphore, 1, NULL),  以下代码利用 Event 内核对象与计数器模拟实现了 PV 操作:   class Signal { private: LONG m_nCount; HANDLE m ...
在 Virtual C++ 6.0 创建的 Win32 Application 和 Win32 Console Application 中使用 MFC 是可能的,主要的困难在于绕过 MFC 提供的 WinMain 函数。下面我提供一个方法以供参考:   进入 Project-->Setting--> C/C++ Page ,做以下修改:   1.
刚刚从 Microsoft 网站下栽了 Speech SDK 5.1 和中日文发声补丁,参考 Speech SDK 文档写了几个小程序,尽管我也是刚刚接触 Speech 若干小时的初学者,还是拿出来共享吧:   Speech SDK 采用 COM 的形式封装,和大多数 COM 对象一样,下面是一个似曾相识的初始化:   CoInitialize(NULL);   CLSIDFromProgID(L"SAPI.SpVoice& ...
续: 浅谈 MFC 的子类化机制和该机制的一个应用( 1 )   BOOL CDumpMsgBox::OnDumpOut(LPSTR pszDumpBuffer, UINT nBufferSize) { ASSERT(pszDumpBuffer != NULL && nBufferSize != 0); ASSERT(AfxIsValidString(pszDumpBuffer, nBufferSize));   ...
Global site tag (gtag.js) - Google Analytics