博客园  :: 首页  :: 联系 :: 管理

2013年9月30日

摘要: 【翻译】线程间伪共享的避免和识别 英文原文: Avoiding and Identifying False Sharing Among Threads. http://software.intel.com/en-us/articles/avoiding-and-identifying-false-sharing-among-threads/ ... 阅读全文

posted @ 2013-09-30 19:19 Apprentice89 阅读(2942) 评论(1) 推荐(0) 编辑

2013年9月9日

摘要: 转自http://blog.csdn.net/zxzxy1988/article/details/8587244给定两个已经排序好的数组(可能为空),找到两者所有元素中第k大的元素。另外一种更加具体的形式是,找到所有元素的中位数。本篇文章我们只讨论更加一般性的问题:如何找到两个数组中第k大的元素?不过,测试是用的两个数组的中位数的题目,Leetcode第4题Median of Two Sorted Arrays方案1:假设两个数组总共有n个元素,那么显然我们有用O(n)时间和O(n)空间的方法:用merge sort的思路排序,排序好的数组取出下标为k-1的元素就是我们需要的答案。这个方法比较 阅读全文

posted @ 2013-09-09 21:17 Apprentice89 阅读(980) 评论(0) 推荐(0) 编辑

2013年8月28日

摘要: 过去几年中,我们一直在使用、构建和宣传消息队列,我们认为它们是很令人敬畏的,这也不是什么秘密。我们相信对任何架构或应用来说,消息队列都是一个至关重要的组件,下面是十个理由: 1. 解耦 在项目启动之初来预测将来项目会碰到什么需求,是极其困难的。消息队列在处理过程中间插入了一个隐含的、基于数据的接口层,两边的处理过程都要实现这一接口。... 阅读全文

posted @ 2013-08-28 10:10 Apprentice89 阅读(1005) 评论(1) 推荐(1) 编辑

2013年8月3日

摘要: epoll用法回顾先简单回顾下如何使用C库封装的3个epoll相关的系统调用。更详细的用法参见http://www.cnblogs.com/apprentice89/archive/2013/05/06/3063039.htmlint epoll_create(int size);int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);int epoll_wait(int epfd, struct epoll_event *events,int maxevents, int timeout);使用起来很清晰,首先要调 阅读全文

posted @ 2013-08-03 15:30 Apprentice89 阅读(21160) 评论(4) 推荐(7) 编辑

2013年6月26日

摘要: C++通过引用传递数组数组形参可以声明为数组的引用。如果形参是数组的引用,编译器不会将数组实参转化为指针,而是传递数组的引用本身。在这种情况下,数组大小成为形参和实参类型的一部分(实参长度与形参长度不同时,编译报错)。void printValue(int (&a)[5]){...}int main(){int i=0;int j[2]={0,1};int k[5]={0,1,2,3,4};printValue(i);//编译报错printValue(j); //编译报错printValue(k); //编译OKreturn 0;}C++多维数组的传递C++中没有多维数组,多维数组实际 阅读全文

posted @ 2013-06-26 20:53 Apprentice89 阅读(422) 评论(1) 推荐(0) 编辑

2013年5月14日

摘要: Werner Vogels on December 23, 2008http://www.allthingsdistributed.com/2008/12/eventually_consistent.html这篇文章是Werner Vogel在2008年发布在ACM Queue上的一篇数据库方面的重要文章,阐述了NoSQL数据库的理论基石--最终一致性,对传统的关系型数据库(ACID,Transaction)做了较好的补充。国内已有很多相关方面的介绍,比如InfoQ在2009年的介绍,但基本没有完整翻译的版本。在这里做一个完整的翻译,供初学者参考。最终一致性:在世界范围内构建可靠的分布式系统要 阅读全文

posted @ 2013-05-14 11:13 Apprentice89 阅读(348) 评论(0) 推荐(0) 编辑

2013年5月13日

摘要: leveldb介绍 http://code.google.com/p/leveldb/ http://en.wikipedia.org/wiki/LevelDB http://highscalability.com/blog/2011/8/10/leveldb-fast-and-lightweight-keyvalue-database-from-the-au... 阅读全文

posted @ 2013-05-13 08:49 Apprentice89 阅读(341) 评论(0) 推荐(0) 编辑

2013年5月9日

摘要: select 实现分析 –2 【整理】l select相关的结构体比较重要的结构体由四个:struct poll_wqueues、struct poll_table_page、struct poll_table_entry、struct poll_table_struct。每一个调用select()系统调用的应用进程都会存在一个struct poll_wqueues结构体,用来统一辅佐实现这个进程中所有待监测的fd的轮询工作,后面所有的工作和都这个结构体有关,所以它非常重要。struct poll_wqueues { poll_table pt; struct poll_table_page 阅读全文

posted @ 2013-05-09 21:43 Apprentice89 阅读(8187) 评论(3) 推荐(2) 编辑

摘要: 等待队列 正如list_head结构那样,等待队列(wait queue)作为linux内核中的基础数据结构,与进程调度紧密结合在一起;在驱动程序中,常常使用等待队列来实现进程的阻塞和进程的唤醒。因此,我们很有必要对它的内部实现进行分析。 0.数据结构 一般我们的链式线性表都会有一个头结点,以使我们迅速找到这个线性链表的“领导”。在等待队列中,同样有队列头,只不过等待队列头和普通的等待队列结... 阅读全文

posted @ 2013-05-09 18:55 Apprentice89 阅读(2992) 评论(0) 推荐(0) 编辑

摘要: select源码结构图:源码分析:#undef __NFDBITS#define __NFDBITS (8 * sizeof(unsignedlong))#undef __FD_SETSIZE#define __FD_SETSIZE 1024#undef __FDSET_LONGS#define __FDSET_LONGS (__FD_SETSIZE/__NFDBITS)typedefstruct { unsignedlongfds_bits [__FDSET_LONGS]; //1024个bit。} __kernel_fd_set;//由上可以看到可以支持1024个描述符//系统调用(内核态 阅读全文

posted @ 2013-05-09 18:55 Apprentice89 阅读(1211) 评论(1) 推荐(1) 编辑