- 博客(34)
- 资源 (2)
- 收藏
- 关注
转载 随机数——随机函数——大数随机及等概率探讨
本文主要讨论大范围内随机数的产生办法,讨论在随机范围内的等概率问题。一,要求 1, 产生一个比较大的随机数。 2, 产生的随机数在随机范围内等概率。二,知识背景 我们知道在C语言中有rand()函数可以提供随机数,rand()函数的范围为0到32727。我们假定认为rand()产生的随机数在0到32727范围内是等概率的。如果我们需要得到一个小范围内的随机数,比如0到55
2012-06-17 21:53:54
1378
转载 再谈“事件驱动”
之前也写过一些关于事件驱动模型的文章,事隔一年多,再谈起事件驱动,又是一种新的感触,借此文来分享一下,希望能够帮助到在工作、学习中在这方面遇到困惑的朋友。通常,我们会把轮询和事件驱动拿来做对比,关于它们两者,我在《浅淡“事件驱动”》一文中有举过一个传统邮件和电子邮件的例子,可以帮助大家来理解。轮询的最大缺点是盲目的做,CPU浪费很严重;事件驱动解决了浪费CPU的问题,它只在需要做的时候做,但是
2012-06-10 17:39:43
952
转载 详解shuffle过程
先看看map端的情况,如下图:上图可能是某个map task的运行情况。拿它与官方图的左半边比较,会发现很多不一致。官方图没有清楚地说明partition, sort与combiner到底作用在哪个阶段。我画了这张图,希望让大家清晰地了解从map数据输入到map端所有数据准备好的全过程。整个流程我分了四步。简单些可以这样说,每个map task都有一个内存缓冲区,存储着map的
2012-06-10 16:53:51
780
原创 mapreduce的shuffle和排序
mapreduce的map结束后,把数据重新组织,作为reduce阶段的输入,该过程称之为shuffle---洗牌。这个shuffle过程是整个mapreduce的心脏,如果理解了shuffle的过程,在必要的时候可以优化mapreduce程序的代码。总结shuffle的主要功能:1.完整地从map task端拉取数据到reduce 端;2.在跨节点拉取数据时,尽可能地减少对带宽的不必
2012-06-10 16:35:42
846
转载 条件变量(Condition Variable)详解
条件变量(Condtion Variable)是在多线程程序中用来实现“等待->唤醒”逻辑常用的方法。举个简单的例子,应用程序A中包含两个线程t1和t2。t1需要在bool变量test_cond为true时才能继续执行,而test_cond的值是由t2来改变的,这种情况下,如何来写程序呢?可供选择的方案有两种:第一种是t1定时的去轮询变量test_cond,如果test_cond为false,
2012-06-07 21:07:02
449
转载 reactor模式---事件触发模型
Reactor这个词译成汉语还真没有什么合适的,很多地方叫反应器模式,但更多好像就直接叫reactor模式了,其实我觉着叫应答者模式更好理解一些。通过了解,这个模式更像一个侍卫,一直在等待你的召唤。1.reactor的形象比喻入门并发系统常使用reactor模式,代替常用的多线程的处理方式,节省系统的资源,提高系统的吞吐量。先用比较直观的方式来介绍一下这种方式的优点,通过和常用
2012-06-07 17:12:10
3053
转载 定时器(Timer)的实现
本文是继前面写过的《谈事件驱动模型中的“超时”(Timeout)处理》的第二篇,主要谈一谈事件驱动模型超时处理中用到的定时器的实现,以及如何用定时器来处理事件驱动模型中的超时事件。下面就从以下几个方面谈一下定时器:1. 什么是定时器?定时器,又称Timer,顾名思义,它是用来在指定的时刻完成特定任务的一种工具的抽象。2. 定时器是干什么用的?在程序中,定时器常被用来完成两类任务
2012-06-07 15:59:08
1289
转载 谈事件驱动模型中的“超时”(Timeout)处理
写在最前面:本文是作者在开发爬虫程序时的一些体会,分享一下,希望能给读者朋友一点点帮助。通常,在事件驱动模型的程序中,会有一个事件处理模块,我们称之为EventProcessor,还会有一个事件检测模块,我们称之为EventMonitor。下面是一般的处理流程:(1)EventProcessor在发出对某一个事件的请求后,不会去等待事件结果的返回,而是返回去做其它的工作;(2)当Eve
2012-06-07 15:49:02
1066
转载 C++结构类型在GDB中的强制类型转换
今天在调试程序的过程中遇到的一个小问题,在这里记录一下,希望能对遇到同样问题的朋友有所帮助。以下面的程序为例程进行说明:class Base{public: Base(int nNum) : m_nNum(nNum) {} private: int m_nNum;}; class A : public Base{publ
2012-06-07 15:32:09
2214
转载 浅析对象池
在稍微大型一点的软件系统开发中,通常我们会用到内存池,对象池,线程池,连接池等各种各样的池(Pool),本文就来讲一讲对象池(Object Pool)。下面从四个方面来介绍一下对象池:1.什么是对象池(Object Pool) ?池(Poo), 与集合在某种意义上有些相似。 水池,是一定数量的水的集合;内存池,是一定数量的已经分配好的内存的集合;线程池,是一定数量的已经创建好的线程的集合。
2012-06-07 15:14:34
559
转载 浅谈“事件驱动”
通常,我们设计一个事件处理模型的程序有两种思路,一种是通过轮询的方式,一种通过事件驱动的方式,事件驱动方式也被称为消息通知方式。下面举个简单收信的例子,来说明两种实现方式的不同:(1)传统的邮件,邮递员把它放到你家的邮箱里。因为你不知道什么时候有邮件,所以你要经常去检查邮箱,最近到底有没有邮件。这就是所谓的轮询方式,你要时常去检查,有没有发生事件发生,当你检查到有事件发生时,你采取相应措施,处
2012-06-07 15:01:27
676
转载 两种系统热备方案
系统热备,是系统容灾设计过程中常用的手段,下面就分享两种系统热备方法,以及其优缺点的对比:热备方案一(如下图所示):该方案的基本原理为:把所有写请求由统一的接入层(Handle层)转发给DataServer,特定的DataServer对发送给其的写请求进行运算处理。所有的读请求都直接由DataServer提供。另外,DataSever的机器可以进行冗余设计,如上图中的DataS
2012-06-07 14:49:34
2718
转载 Bash编程七大展开之参数展开(Parameter Expansion)
1. ${parameter} 取parameter的值2. ${parameter:-word} 如果parameter为空,则用word的值做parameter的缺省值3. ${parameter:=word} 在2的基础上,把word的值赋给parameter4. ${parameter?=word} 如果parameter为空,word作为错误信息输出。5. ${param
2012-06-07 14:44:47
663
原创 shell脚本容易出错的地方
在shell脚本中,常常会遇到一些容易出错的地方,现在记录他们,以备后用。我尽量不列举错误的,因为我们只有记住正确的就可以了。1. for循环for file_name in `ls *.mp3`dodone2.cp "$file" "$target" 比不带双引号的更安全。3.条件判断if的时候,使用[ $foo = "bar" ]不如[ "$foo" =
2012-06-07 14:42:57
516
转载 细说C/C++中的宏(Macro)和宏替换
宏(Macro),在C/C++中,是一个颇有争议的话题。在以前的老代码中,我们总是可以看到很多使用得很巧妙的宏,而在大多数的C++教材中,宏的使用都是不被推荐的,因为宏的使用比较容易产生BUG,这些BUG是由一些宏的边界效应(Side effect)所导致,而且这些BUG在调试的过程中都是很难发现的。到底该不该用宏?我的观点是,并不是因为它容易产生BUG就不用它,一定要学会如何用宏、何时用宏。很多
2012-06-07 12:48:02
1294
转载 浅析常用事件驱动库
通常,我们写服务器处理模型的程序时,有以下几种模型:(1)每收到一个请求,创建一个新的进程,来处理该请求;(2)每收到一个请求,创建一个新的线程,来处理该请求;(3)每收到一个请求,放入一个事件列表,让主进程通过非阻塞I/O方式来处理请求上面的几种方式,各有千秋,第(1)中方法,由于创建新的进程的开销比较大,所以,会导致服务器性能比较差,但实现比较简单。第(2)种方式,由于要涉及到
2012-06-07 09:13:22
1069
转载 谈”句柄泄漏“
“泄漏”是我们写程序的人老生常谈的一个话题。最为常见的就是内存泄漏(memory leak),本文介绍一种新的泄漏—句柄泄漏(handle leak)。在windows系统的程序中,我们经常会遇到句柄这个词,而且windows也抽象出了一种句柄类型HANDLE。在unix系统的系统中,句柄这个词用的不是很多。我们用另一个词描述它—文件描述符(file descriptior)。这里的文件是指广义的
2012-06-07 09:09:39
2110
转载 linux下进程名和进程id的转换
1.由进程名得到进程id: pidof xx , 其中xx是进程名2.由进程id得到进程名: readlink /proc/xxx/exe,其中xxx是进程的id3.如果是shell程序,因为shell的进程名是相应的shell名,所以不能直接根据shell脚本的名字来获取其进程id,可以由以下两种方法(以sh为例):(1)通过pidof sh得到所有的sh进程的pid的集合,然后再通
2012-06-05 14:26:01
822
转载 简单工厂模式(Simple Factory) vs 工厂方法模式(Factory Method)
写在前面: 简单工厂模式和方法模式是设计模式中两种比较简单,同时也是比较常用的模式,本文的主要任务就是通过循序渐进的方法,从根本上掌握这两种设计模式。最后再通过对比两种模式的不同之处,更进一点加深对它们的掌握。一.简单工厂模式(Simaple Factory)在简单工厂模式中的各个角色:Creator: 它的角色就是工厂,负责生产各种产品Product: 它的角色是
2012-06-04 21:20:52
612
转载 C++设计模式 --单例模式(简单的实现和对象释放的控制)
单例模式通常也被叫做单件模式 在我们的编程的过程中有很多的地方都要用到单例模式,就是使用时需要仅仅有一个实例,并提供一个访问它的全局的访问点,供全部可用到它的程序模块的共享。它又很多的实现的方法,通常情况下仅仅一个全局的变量就可以实现一个简单的单例。这里介绍的是用一个单体类来实现单例模式,用的是一个类静态私有指针变量指向类的唯一的实例,同时用一个静态的共有的方法获取这个实例。比如
2012-06-04 20:06:25
1050
转载 static 成员函数及变量整理
1.static成员的所有者是类本身和对象,但是多有对象拥有一样的静态成员。从而在定义对象是不能通过构造函数对其进行初始化。2.静态成员不能在类定义里边初始化,只能在class body外初始化。3.静态成员仍然遵循public,private,protected访问准则。4.静态成员函数没有this指针,它不能返回非静态成员,因为除了对象会调用它外,类本身也可以调用。 C++的
2012-06-04 20:04:41
491
1
转载 内联函数,构造函数,静态函数都不能是虚函数
inline, static, constructor三种函数都不能带有virtual关键字。inline是编译时展开,必须有实体;static属于class自己的,也必须有实体;virtual函数基于vtable(内存空间),constructor函数如果是virtual的,调用时也需要根据vtable寻找,但是constructor是virtual的情况下是找不到的,因为const
2012-06-04 20:03:07
287
转载 c 函数指针的定义 和 C++回调函数的使用
函数指针与typedef关于C++中函数指针的使用(包含对typedef用法的讨论) (一)简单的函数指针的应用。//形式1:返回类型(*函数名)(参数表) char (*pFun)(int); char glFun(int a){ return;} void main(){ pFun = glFun; (*pFun)(2); } 第一行定义了一个指针变量pF
2012-06-04 19:55:15
401
转载 linux信号机制之sigaction结构体浅析
信号安装函数sigaction(int signum,const struct sigaction *act,struct sigaction *oldact)的第二个参数是一个指向sigaction结构的指针(结构体名称与函数名一样,千万别弄混淆了)。在结构sigaction的实例中,指定了对特定信号的处理,信号所传递的信息,信号处理函数执行过程中应屏蔽掉哪些函数等。当然,此指针也可以为NULL
2012-06-04 19:52:26
365
转载 C++中引用(&)的用法和应用实例
对于习惯使用C进行开发的朋友们,在看到c++中出现的&符号,可能会犯迷糊,因为在C语言中这个符号表示了取地址符,但是在C++中它却有着不同的用途,掌握C++的&符号,是提高代码执行效率和增强代码质量的一个很好的办法。在 c++学习提高篇(3)---隐式指针的文章中我详细介绍了在隐式指针&的用法,其实这两个概念是统一的。引用是C++引入的新语言特性,是C++常用的一个重要内容之一,正确、灵活
2012-06-04 19:42:50
213
转载 拷贝构造函数和赋值构造函数的异同
我之所以认为赋值构造函数不应该被称为一个构造函数,是因为在调用赋值构造函数的时候,类对象已经存在,自然谈不上构造类对象,它只是对该已经存在的类对象的成员变量进行修改(所谓的赋值)操作。而拷贝构造函数是利用一个已经存在的类对象构造出一个新的类对象。 由于并非所有的对象都会使用拷贝构造函数和赋值函数,程序员可能对这两个函数有些轻视。请先记住以下的警告,在阅读正文时就会多心: 如
2012-06-04 19:41:49
497
转载 Web Server 架构浅谈-Simple Event-Driven Achitecture
本节首先给出关于架构评价的一些指标: [H. Xie 2002]关于架构提出了micro performance和macro performance,以此为参考,在本系列中,对架构好坏的评价分析时也是从这两个层面来讨论,但内涵稍有不同: 用户角度:公平性,响应时间,吞吐率。其中响应时间有包括等待时间和处理时间。对人来说公平性是第一位的,如果一个架构是歧视性的,往往没有生命力
2012-06-03 20:52:18
497
转载 Web Server 架构浅谈-Threadpool-based Multiple Threaded Achitecture
上节我们讲到了简单的多线程架构,这个架构可以做一些改进和优化:首先,是优化线程创建的开销。操作系统默认的进程初始栈空间,32位操作系统为1M,64位操作系统为2M(不同操作系统版本可能会有差异)。那么并发10K的线程可能需要10G内存,这是不可想象的,因此可以自行设定栈的大小和溢出区,代码如下:size_t size = max(10*PAGE_SIZE,PTHREAD_STACK_MIN
2012-06-03 20:49:47
323
转载 web server架构之一Simple Multiple Threaded Achitecture
Web Server的架构基本分为多线程和事件驱动两个基本观点,在实现上对多线程和事件驱动取长补短形成了流水线的架构。 在Web Server高并发,高吞吐率,低资源消耗,低延迟的要求下,Web Server的发展也历经了事件驱动占主流,到多线程反击[1][2],以及比较成熟的流水线架构。 在多线程的优点主要是容易理解,对资源的使用很容易饱和,缺点是上下文切换太多(线程代码
2012-06-03 20:04:53
417
转载 一致性 hash 算法( consistent hashing )
consistent hashing 算法早在 1997 年就在论文 Consistent hashing and random trees 中被提出,目前在 cache 系统中应用越来越广泛;1 基本场景比如你有 N 个 cache 服务器(后面简称 cache ),那么如何将一个对象 object 映射到 N 个 cache 上呢,你很可能会采用类似下面的通用方法计算 object 的
2012-06-03 19:53:20
228
转载 hadoop使用心得
1. Hellow hadoop~~!Hadoop(某人儿子的一只虚拟大象的名字)是一个复杂到极致,又简单到极致的东西。说它复杂,是因为一个hadoop集群往往有几十台甚至成百上千台low cost的计算机组成,你运行的每一个任务都要在这些计算机上做任务的分发,执行中间数据排序以及最后的汇总,期间还包含节点发现,任务的重试,故障节点替换等等等等的维护以及异常情况处理。谁叫hadoop集群往
2012-06-03 16:21:52
836
转载 太宗皇帝的长孙皇后
做人要低调,可见一斑,越是位高,越要低调,长盛不衰的秘诀啊。 今天找来这些文章又好好读了一遍。特别是这么一段“为太子,患在德不立,名不扬,何患无器用邪”,回味无穷。 长孙皇后(600—636),长安人,祖先为北魏拓跋氏,父亲长孙晟隋时官至右骁卫将军。她从小爱好读书,通达理仪,十三岁时嫁给李世民为妻。李世民升储登基以后,被立为皇后。长孙皇后生性节俭,母仪天下。贞观十
2012-06-03 16:02:26
11304
转载 关于 23 种设计模式的有趣见解
在网络上流畅很广的一篇旧文,暂时没找到原作者,目前所看到的最早转载时间是 2005 年 2 月 28 日。作者用轻松的语言,形象解释了 23 种模式,有很好的启发作用。创建型模式1、FACTORY—追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factor
2012-06-03 15:35:17
363
转载 如何打造一个创业团队
前几天水木十大的一个帖子说了这么一个事情: http://job.17173.com/content/2011-03-25/20110325095707450,1.shtml 文章很长,希望大家耐心读完。 我早年在一个创业公司工作过多年,我对创业公司有一些体会,跟大家分享一下,创业公司大致会有三种层次的人,领袖,高层,中层,低层。 领袖和高层通过理想
2012-06-03 15:31:03
448
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人