自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 ACE中的Double Checked Locking 模式

 意图无论什么时候当临界区中的代码仅仅需要加锁一次,同时当其获取锁的时候必须是线程安全的,可以用Double Checked Locking 模式来减少竞争和加锁载荷。 动机1、标准的单例。开发正确的有效的并发应用是困难的。程序员必须学习新的技术(并发控制和防止死锁的算法)和机制(如多线程和同步API)。此外,许多熟悉的设计模式(如单例和迭代子)在包含不使用任何并发上下文假设的顺序程序中可以工作的很好。为了说明这点,考虑一个标准的单例模式在多线程环境下的实现。单例模式保证一个类仅有一个实例同时提供了全局唯一

2011-03-21 20:20:00 468

转载 The C10K problem

The C10K problem<br />如今的web服务器需要同时处理一万个以上的客户端了,难道不是吗?毕竟如今的网络是个big place了。 <br />现在的计算机也很强大了,你只需要花大概$1200就可以买一个1000MHz的处理器,2G的内存, 1000Mbit/sec的网卡的机器。让我们来看看--20000个客户,每个为50KHz,100Kbyes和 50Kbit/sec,那么没有什么比为这两万个客户端的每个每秒从硬盘读取4千字节然后发送到网络上 去更消耗资源的了。可以看出硬件不再是瓶颈了。

2010-11-01 10:20:00 917

转载 TBB: concurrent_queue 高性能的奥秘

首先自己总结下:1:要在多线程下达到高性能就要     1:尽量避免线程访问冲突(分解任务,以尽可能小的颗粒度执行,这样就避免冲突,或者,即使冲突发生,等待的时间也不至于太长)          如何把程序分解为更小的颗粒度,这里面大有学问可做。本文就提出了一个并发的concurrent_queue的解决方案。     2:冲突发生时,采用高效的冲突解决方案(eg,循环测试,Sleep,等)举例:1. Chrome的线程模型仔细回忆一下我们大部分时候是怎么来用线程的,在我足够贫瘠的多线程经历中,往往都是这样

2010-07-27 21:47:00 1212

原创 基于探针的动态插桩

由于基于探针的动态插桩,通常只能在函数边界插入代码,难以对程序的指令流进行很好的分析,所以平时用的比较少。以前使用微软研究院的detour的API觉得它很神奇,最近看了下它的原理还是很简单:基于简单动态重写函数的开始几个字节,然后跳转到特定函数。呵呵,但是要做好还是不容易的。闲来无事写了一个很粗糙的实现。基本原理就是:(1)保存函数的入口的几个字节,并插入一天跳回函数的jmp指令(这一块代码称为trampaline)。这里的前几个字节不是个定数是有原因的,实际上我们只需要前5字节来保存一条JMP指令,但入口

2010-07-25 17:13:00 2369

转载 NoSQL数据库探讨之一 - 为什么要用非关系数据库

<br />作者:robbin<br />来源:http://robbin.javaeye.com/blog/524977<br />随着互联网web2.0网站的兴起,非关系型的数据库现在成了一个极其热门的新领域,非关系数据库产品的发展非常迅速。而传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,例如: <br />1、High performance - 对数据库高并发读写的需求 <br />web2.0网站要根据

2010-06-08 20:25:00 423

原创 不确定性引发的烦恼

生活中,大多数人总希望事情的发展在自己可控制的范围内,喜欢规避风险和不确定性(呵呵,也许你是喜欢高风险高收益那类)。求解一个问题时,总想有个唯一确定的答案;向mm表白时,也总希望有个确定的回复。模棱两可的东西让我们不踏实,然而现实中影响事物发展的因素总是多元的,关键是其中的一些因素是随机的、偶然的。哦,。。。,偶然性和必然性还是给哲学家去思考吧。 昨晚无聊的时候,把朋友一直推荐的《(500

2010-01-16 14:11:00 921 1

转载 几个重要的OpenMP benchmark

There are currently four major sets of benchmarks for OpenMP. The suites are complementary, as they are based on low-level operations, kernels and applications respectively. The EPCC Microbenchmar

2009-10-12 17:27:00 941

原创 HDtrans的翻译机制

和所有翻译器类似Guset程序按基本块翻译后存放在code cache中,cache中的代码被真正执行。为了保持简单的设计原则,HDtrans没有采用寄存器生存期分析等复杂优化技术,仅仅使用了trace linearization和sieve技术,优化trace生成和间接指令的翻译。 直接跳转最大限度的利用已翻译的基本块。如果跳转的目标块已经存在,直接跳转到已翻译块。如果目标地址所在块未翻

2009-10-10 14:35:00 551

转载 多线程fork的安全性

进程创建中的 fork 问题Solaris 9 产品和更早 Solaris 发行版中处理 fork() 的缺省方式与在 POSIX 线程中处理 fork() 的方式稍有不同。 对于 Solaris 9 之后的 Solaris 发行版,在所有情况下,fork() 都会按照为 POSIX 线程指定的方式工作。表 5–1 对在 Solaris 线程和 pthread 中处理 fork() 的相似与不

2009-09-22 18:45:00 915

原创 Hack HDTrans(一):启动过程

“控制复杂性是计算机编程的本质。” ——Brian Kernighan HDTrans是一个轻量级的IA32到IA32动态翻译系统,它的初衷是设计成内核级的翻译器和设备驱动沙箱(sandbox),力求简洁和易修改。当Brian Kernighan首创的“hello, world”程序遇到动态翻译器会发生什么呢?$HDTrans ./hello$hello, world

2009-09-07 23:50:00 620

原创 Linux守护进程的coding rules

1.调用umask将文件方式创建屏蔽字设置为0。由继承得来的文件方式创建屏蔽字可能会拒绝设置某些许可权。例如,若daemon进程要创建一个组可读、写的文件,而继承的文件方式创建屏蔽字,屏蔽了这两种许可权,则所要求的组可读、写就不能起作用。2.调用fork并结束父进程。目的在于使子进程继承获得父进程的组id,但保证不是进程组的leader(这是因为调用setsid的进程必须不是某个进程组的lea

2009-07-20 20:23:00 511

原创 DynamoRIO开源了

DynamoRIO是一个运行时代码修改工具,提供了一套API供用户定制自己的程序分析、profile以及动态插装工具。主页地址http://code.google.com/p/dynamorio/主要著者的博客http://www.govirtual.org/blogs/derek/ 

2009-06-30 20:52:00 3384 1

原创 利用Pin分析程序的动态行为特征

在程序设计和优化过程中,我们通常希望能有工具帮助我们分析热点代码、覆盖率、内存泄露等这些特性,对多线程程序还希望能分析并发性、竞争和死锁等等。但这些特征通常在静态编译时很难获取,而且往往只能在运行时才能确定。Pin是intel开发的动态插桩工具,它提供一套API让我们开发和定制自己的性能分析工具,此外它还被广泛用在体系结构研究、安全等领域。目前intel parallel studio的很多特性便

2009-06-29 20:12:00 4077 2

转载 gcc扩展中的宏定义中用 "#" 和 "##"

今天测试了宏定义中的 "#" 和 "##" 的区别。结果如下:  "#"  代表和一个字符串相连接 "##"  代表和一个符号连接,符号可以是变量,或另一个宏符号。举例如下:宏定义如下(1) #define DEV_FILE_NAME "/dev/test_kft"#define OPEN_FILE(fd, n) /{ / fd =

2009-05-05 10:13:00 936

原创 Learning by doing——JOS lab1

JOS是MIT开放课程6.828的实验系统,它做好了涉及底层硬件的基本操作,留给我们一个OS空架子,待我们一步步添加代码,最终形成功能完善的OS。最近做完了lab1,相对于看Linux源码轻松许多,但却切实体验了一把动手写操作系统的感觉。在做实验的时候,要明白的一点是,做这个实验是为了帮助我们更好的理解操作系统的概念和基本的设计原则,多想想要是自己设计这个系统会怎么做,然后对比JOS设计,给出

2009-03-03 19:53:00 1299

原创 手动编译运行speccpu2000中的benchmarks

目前需要测试模拟器的性能,而又只能获得speccpu2000中benchmarks的源码。别无选择,只有自己手动编译,原以为写个简单的makefile和一个运行自动编译的shell脚本,能很快解决问题!真正实现的时候,才发现存在很多移植和编译选项设置问题(当然这些在benchmark的docs目录下有部分说明,你可以去查看)。开始之前确保你的系统有:         一份speccpu2000的b

2009-01-16 13:54:00 1355

原创 虚拟化概述——研读历程

虚拟化的技术,现在可以说炙手可热。VMware,微软,Citrix等都投入相当多的人力物力在这方面。为了赶赶潮流,咱现在也正从事体系结构虚拟化方面的研究,其实这里面也包含了我的很多无奈——“老板”分配的方向!对计算虚拟化,我现在还是入门级别,大部分这方面的概念都是基于《Virtual Machines:Versatile Platforms for Systems and Processes》这本

2008-09-15 18:22:00 619

原创 JDBC连接DB2的总结

        这几天一直在给Hibernate配置Tomcat的DataSource,网上关于这种例子也有很多,其中http://www.theserverside.com/tt/articles/article.tss?l=HibernateTomcat(介绍Tomcat5.5和Hibernate3.1联合使用非常详细实用)。不过db2的例子很少,虽然说原理是一样的,但实际去做的时候很多细节问

2007-01-06 23:00:00 1013

转载 学习java的一些方向

本文将告诉你学习Java需要达到的30个目标,希望能够对你的学习有所帮助。对比一下自己,你已经掌握了这30条中的多少条了呢?   1.你需要精通面向对象分析与设计(OOA/OOD)、涉及模式(GOF,J2EEDP)以及综合模式。你应该十分了解UML,尤其是class,object,interaction以及statediagrams。  2.你需要学习JAVA语言的基础知识以及它的核心类库(col

2006-11-11 20:10:00 705

空空如也

空空如也

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

TA关注的人

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