- 浏览: 230050 次
最新评论
-
xugangqiang:
很好很强大,强烈推荐。
漫谈事务与分布式事务(4)- 最终一致性 -
mike79:
有个问题,是关于gtid到底是在什么时候生成的。从refman ...
MySQL 5.6 全局事务 ID(GTID)实现原理(二) -
supernavy:
翻译的非常好
Disruptor 2.0 - 所有的改变 -
in355hz:
检查一下 AttachThreadInput 的返回值? 另外 ...
利用 AttachThreadInput 改变其它进程的输入法状态 -
chengdu1113:
你好:
我正在开发一种npapi的插件,但是在输入框中 ...
利用 AttachThreadInput 改变其它进程的输入法状态
文章列表
原文地址: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 ...
- 2009-07-24 13:50
- 浏览 1284
- 评论(0)
实现 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 ...
- 2009-07-24 13:20
- 浏览 1245
- 评论(0)
利用 AttachThreadInput 和 WM_INPUTLANGCHANGEREQUEST 消息改变其它进程的输入状态
众所周知,通过 ActivateKeyboardLayout 函数可以改变当前线程的输入法状态,不过最近发现通过 AttachThreadInput 和 WM_INPUTLANGCHANGEREQUEST 连用可以改变任意进程内线程的输入法状态,代码如下:
以下代码通过 GetKeyboardLayoutList 取得首选的中文输入法的 HKL(Keybroad Layout Handle):
HKL g_hklRPC = NULL;
BOO ...
- 2009-07-24 13:10
- 浏览 7256
- 评论(2)
Squid 2.6 STABLE 6 配置与管理指南
[Squid 是什么]
Squid 是 Unix/Linux 服务器上最常用的代理服务器,它也有 Windows 的版本。可以用 Squid 简单的配置一个代理服务器,以实现:
1) 匿名或需要认证的 Internet 代理服务器。
2) 局域网 ...
- 2009-07-24 13:03
- 浏览 3478
- 评论(0)
抓取 Direct3D 图像到 GDI 位图
- 博客分类:
- C/C++
比较简单, 下面直接贴代码了:
// 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 ...
- 2009-07-24 12:54
- 浏览 1656
- 评论(0)
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)( ...
- 2009-07-24 12:51
- 浏览 2517
- 评论(0)
信号量是最早出现的用来解决进程同步与互斥问题的机制,包括一个称为信号量的变量及对它进行的PV原语操作。
实际上 Windows 系统提供了 Semaphore 内核对象实现信号量及 PV 操作, 其 P 操作相当于 WaitForSingleObject(hSemaphore, INFINITE), V 操作相当于 ReleaseSemaphore(hSemaphore, 1, NULL), 以下代码利用 Event 内核对象与计数器模拟实现了 PV 操作:
class Signal
{
private:
LONG m_nCount;
HANDLE m ...
- 2009-07-24 12:47
- 浏览 2919
- 评论(0)
在
Virtual C++ 6.0
创建的
Win32 Application
和
Win32 Console Application
中使用
MFC
是可能的,主要的困难在于绕过
MFC
提供的
WinMain
函数。下面我提供一个方法以供参考:
进入
Project-->Setting--> C/C++ Page
,做以下修改:
1.
- 2009-06-06 00:16
- 浏览 2320
- 评论(0)
刚刚从
Microsoft
网站下栽了
Speech SDK 5.1
和中日文发声补丁,参考
Speech SDK
文档写了几个小程序,尽管我也是刚刚接触
Speech
若干小时的初学者,还是拿出来共享吧:
Speech SDK
采用
COM
的形式封装,和大多数
COM
对象一样,下面是一个似曾相识的初始化:
CoInitialize(NULL);
CLSIDFromProgID(L"SAPI.SpVoice& ...
- 2003-07-04 09:20
- 浏览 2639
- 评论(0)
续:
浅谈
MFC
的子类化机制和该机制的一个应用(
1
)
BOOL CDumpMsgBox::OnDumpOut(LPSTR pszDumpBuffer, UINT nBufferSize)
{
ASSERT(pszDumpBuffer != NULL && nBufferSize != 0);
ASSERT(AfxIsValidString(pszDumpBuffer, nBufferSize));
...
- 2003-07-03 15:59
- 浏览 1101
- 评论(0)