Recent Posts
-
March 12, 2012
Spinlock 的很多线程抢占时的性能优化,补充 pthread mutex 和 futex相关知识
微博里面看到有人说spinlock线程比较多在以前抢占锁时性能比价差。因为之前搜索过c++了spinlock,大多解决办法就是 那种指数的规避的办法咯,就是如果实在不行,就先让cpu指数的等待时间空转几次,实在还是拿不到锁在休眠。可以去看nginx的 core 代码的spinlock文件的实现。像那些boost的spinlock也差不多大,之前说过了。 这样很多个线程都在抢那个锁的时候,不至于都在那里忙等,比较好一点。 在网上搜索一下 “spinlock Exponent...
-
March 09, 2012
Linux 内核fs aio 源码阅读
下载LOFTER我的照片书 | 线程 和执行流程(1)用户调用io_submit 之后,应该是马上通过异步文件操作,request直接下到文件系统下面去了,文件系统完成了之后,调用aio_complete 通知 aio模块,aio模块会把完成事件放到aio_ring的环形缓存里面,或者用eventfd通知用户程序,或者等待用户自己调用io_getevent来检测状态。(2)然后全系统只有唯一一个workqueue 来执行那些需要重试的request 。 看注释说这样是避免多个reque...
-
March 03, 2012
Libeio 源码简单阅读
libeio 和 libev同一个作者写的吧,看网上有一篇文章说是node.js用的这个来做异步文件操作的。http://cvs.schmorp.de/libeio/大概过了了一下,代码很少,全部放到一个文件里面,也不复杂,只是宏用的有点多,看起来不是很明了。其实就是把异步操作放到request里面,然后启动几个工作线程,工作线程就会去队列里面那request处理。没有看到什么印象特别深刻的地方。struct eio_req 每个用户的异步操作都放到一个request结构里面去吧。...
-
March 02, 2012
网卡驱动多队列multiqueue 相关知识
以前还在上家公司做vmware esxi5 hypervisor 移植的时候,有接触到Linux网卡驱动看到这个多队列的,但不是很理解这个来用来干什么 ,那是也是和关系。看了这下面这篇文章才知道这个multiqueue原来是这样用的。按照文章说法,多队列之后,在多cpu机器上就可以每个cpu分配一个队列了,这个没个cpu都有独立的queue,“锁争用"和内存争用的情况就可以避免了,性能有很大提高,文章里面应用于 xen 的虚拟网卡,每个虚拟机有独立的一个队列,性能有很大的提高。那个...
-
February 13, 2012
Memory barrier 内存屏障
关于Memory Barrier,理解并行编程必须掌握的一个知识点吧,但用户编程好像接触的不多,至少我没发现那个语言的参考书有说这个的。(2012-2-24 补充, visual c ++ 里面比较新的版本有支持了,硬件的Memory Barrier 有宏 void MemoryBarrier(void);软件的 编译器提示的Memory Barrier 的有宏 _ReadBarrier, _WriteBarrier, and _ReadWriteBarrier http://msdn....
-
February 12, 2012
C++无锁编程资料,无锁队列等
1. Lamport's Lock-Free Ring Buffer [Lamport, Comm. of ACM, 1977] 也就常说的单生产者-单消费者 的ringbuffer, 限制就是只能一个读线程(消费者),一个写进程(生产者)。 好像有人改进了一下设计, 参加文章 “Cache优化的并发无锁队列” http://www.docin.com/p-30332640.html ,这论文里面 “Fastforward for efficient pi...
-
December 31, 2011
Lsm Tree(log Structured merge Tree)
数据库事务系统的一个优化结构,在某些场合比B-tree要好吧。google 出品的高性能key-value数据库levelDB应该是就是根据这个思想实现的。其实就是一个多级的B-tree吧, 通过延时的“磁盘写和归并排序”来减少磁盘写操作,进而提高系统的整体性能。他把多个随机的磁盘写操作,变成一个批量的连续的磁盘的写操作。适合于那种插入很频繁,但查找不是很频繁的应用场合吧(后台的归并整理之前的查找应该是有些性能损失的。)。网上可以找到这个pdf文档,文档讲的很清楚,什么原理看上去并不复杂,...
-
December 20, 2011
英特尔关于开发多线程程序的建议
Intel Guide for Developing Multithreaded Applicationshttp://software.intel.com/en-us/articles/intel-guide-for-developing-multithreaded-applications/这里有个pdf,很多要点吧,对我这种菜鸟来说,值的一看啊。最近要看的东西太多了,队列好长了,不知道什么时候看的完哈!英特尔关于开发多线程程序的建议。 - widebright - widebrigh...
-
December 20, 2011
磁盘读写编程 高吞吐量
来自Apache Kafka项目,一个高吞吐量分布式消息系统,需要做消息的序列化,项目文档提到这个磁盘读写的文档不错,需要仔细学习一下相关思想。http://incubator.apache.org/kafka/design.html值的关注的几个地方: 随机读写和顺序读写操作的性能差异。 两者性能差距一万倍,为了更好的磁盘性能,只能尽量保证你的操作是顺序的了。原文:As a result the performance of linear writes on a 6 7200rpm S...
-
November 30, 2011
Printf打印64位整数导致的bug
#include<stdio.h> void main(void) { _int64 a = 1; char * str = "hello widebright"; printf("%d %s\n",a,str); //这个是打印32位数的,非预期结果 printf("%lld %s\n",a,str); //正确的打印64位数的写法 //上面把64位数当作32位数打印的时候,就把这数的高32位当作第二个参数%s使用了, //因为这时6...