自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Ming

追风少年

  • 博客(34)
  • 资源 (1)
  • 收藏
  • 关注

原创 Pthread 互斥

初始化互斥对互斥加锁对互斥解锁Mutex示例Scoped锁

2015-08-11 13:59:16 929

原创 POSIX 线程小结(续)

join (加入)线程和 detach (分离)线程由于线程创建和销毁很容易,必须有对线程进行同步的机制,避免被其他线程终止——对应的线程函数即 wait() 。实际上,即 join(加入) 线程。join 线程join 线程支持一个线程阻塞,等待另一个线程终止:         #include          int pthread_join (pthread_t

2015-08-11 13:50:57 698

原创 POSIX 线程小结

POSIX 在IEEE Std 1003.1c-1995 (也称为POSIX 1995 或 POSIX.1c) 对线程库进行了标准化。开发人员称之为 POSIX线程,或简称为 Pthreads。Pthreads 是 UNIX 系统上 C 和 C++ 语言的主要线程解决方案。Pthreads APIPthreads API 定义了构建一个多线程程序需要的方方面面——虽然是在很底层做的。Pth

2015-08-11 13:11:32 1241

原创 线程模型

内核级线程模型在一个系统上实现线程模型的方式有好几种,因内核和用户空间提供的支持而有一定程度的级别差异。最简单的模型是在内核为线程提供了本地支持的情况,每个内核线程直接转换成用户空间的线程。这种模型称为“1:1线程模型(threading)”,因为内核提供的线程和用户的线程的数量是1:1。该模型也称为“内核级线程模型(kernel-level threading)”,因为内核是系统线程模型的核

2015-08-09 20:54:12 3417

原创 线程模式

创建多线程应用的第一步

2015-08-09 16:10:30 3015 1

原创 线程小结

二进制程序,进程和线程二进制程序(binaries)是指保存在存储介质上的程序,以给定操作系统和计算机体系结构可访问的格式编译生成,可以运行但尚未开始。进程(process)是操作系统对运行的二进制程序的抽象,包括:加载的二进制程序,虚拟内存,内核资源如打开的文件,关联的用户等。线程(threads)是进程内的执行单元,具体包括:虚拟处理器,堆栈,程序状态。换句话说,进程是正在运行的二进制程序

2015-08-09 14:23:45 837

原创 I/O多路复用之总结

poll() 和 select() 的区别虽然 poll() 和select() 完成相同的工作,但 poll() 调用在很多方面仍然优于 select() 调用:poll() 不需要用户计算最大文件描述符值加 1 作为参数传递给它。poll() 对于值最大的文件描述符,效率最高。试想一下,要通过 select() 监视一个值为900的文件描述符,内核需要检查每个集合中的每个位

2015-08-08 23:55:54 1105

原创 I/O 多路复用之 Event Poll

概述由于 poll() 和 select() 的局限,Linux 2.6内核引入了 event poll(epoll) 机制。虽然 epoll 的实现比 poll() 和 select() 要复杂得多,epoll 解决了前两个存在的基本性能问题,并增加了一些新的特性。对于poll() 和 select(),每次调用时都需要所有被监听的文件描述符列表。内核必须遍历所有被监视的文件描述

2015-08-08 22:36:48 2547

原创 I/O 多路复用之poll

概述poll() 系统调用是System V 的I/O多路复用的解决方案。它解决了一些 select() 的不足,不过 select() 还是被频繁的使用(还是出于习惯或可移植性的考虑)。Poll()       #include        int poll(struct pollfd *fds, nfds_t nfds, int timeout);select() 使用了

2015-08-08 14:11:35 799

原创 I/O 多路复用之select

概述Linux提供了三种 I/O 多路复用方案:select,poll和epoll。在这一篇博客里先讨论select和poll,epoll是Linux特有的高级解决方案,将在下一篇中介绍。select()select()系统调用提供了一种实现同步 I/O 多路复用的机制:#include int select (int n,                 fd_set

2015-08-08 12:40:39 1186

原创 分散/聚集 I/O(scatter-gather I/O)

概述分散/聚集 I/O是一种可以在单次系统调用中对多个缓冲区输入输出的方法,可以把多个缓冲区的数据写到单个数据流,也可以把单个数据流读到多个缓冲区中。其命名的原因在于数据会被分散到指定缓冲区向量,或者从指定缓冲区向量中聚集数据。这种输入输出方法也称为向量 I/O(vector I/O)。与之不同,标准读写系统调用(read,write)可以称为线性I/O(linear I/O)。与线性 I

2015-08-06 23:43:28 9566

原创 改进型Clock算法

算法过程:改进型的Clock算法需要综合考虑某一内存页面的访问位和修改位来判断是否置换该页面。在实际编写算法过程中,同样可以用一个等长的整型数组来标识每个内存块的修改状态。访问位A和修改位M可以组成一下四种类型的页面。1类(A =0, M = 0):表示该页面最近既未被访问,又未被修改,是最佳淘汰页。2类(A =0, M = 1):表示该页面最近未被访问,但已被修改,并不是很好的淘

2015-06-16 16:15:50 20694 3

原创 简单Clock算法

算法过程:         简单Clock算法需要根据页面内存是否被访问来决定是否置换该页面。实际编程中,与最近最久未置换算法类似,用整型数组来表示当前每个内存页面是否被访问,其中1代表被访问过,0代表未访问过。每次置换,指针循环遍历,找出第一个访问位不为1的那个内存页面。并且在找到被置换页面之前,将所经过的所有页面内存对应的访问位置0.在内存块初始化后,取出页面访问序列队列的队头。首

2015-06-16 16:05:58 29891

原创 LRU最近最久未使用算法

算法过程最近最久未使用算法需要引入内存块时钟,即为每个内存块设定一个计时器,用于记录相应内存块中的页面已经存在的时间。每次置换选出所有内存块时钟中最大者作为被置换页面,当页面发生置换时,将其对应的计时器清零,并且其他计时器加1.可用等长的整型数组来表示每个内存块的计时器。在内存块初始化后,取出页面访问序列队列的队头。首先判断内存块中是否已经存在该队头页面,如果存在则直接显示内存块当前情况;

2015-06-16 15:22:01 12018

原创 FIFO先进先出置换算法

算法过程:将内存块数组视为队列,在实现的过程中,初始化时,队头指针指向第一个内存块位置,队尾指针指向最后一个内存块位置。每次进行页面置换时,算法总置换当前队头,并且,队头指针循环加1,队尾指针循环加1.在内存块初始化后,取出页面访问序列队列的队头。首先判断内存块中是否已经存在该队头页面,如果存在则直接显示内存块当前情况;否则,判断此时内存是否已满。如果内存未满,循环遍历找出空闲内存块,

2015-06-16 15:20:53 12217

原创 随机置换算法

算法过程:在内存块初始化后,取出页面访问序列队列的队头。首先判断内存块中是否已经存在该队头页面,如果存在则直接显示内存块当前情况;否则,判断此时内存是否已满。如果内存未满,循环遍历找出空闲内存块,进行页面置换;若内存已满,在所有的内存块中随机选出一个作为被置换页面,缺页数加1。如此循环迭代,直到页面访问序列队列为空时,整个算法执行完毕。最后计算并显示缺页率。其流程图如图所示。

2015-06-16 15:14:16 5084

原创 最佳替换算法模拟

定义最佳(Optimal)置换算法是指,其所选择的被淘汰页面,将是以后永不使用的,或许是在最长(未来)时间内不再被访问的页面。采用最佳置换算法,通常可保证获得最低的缺页率。但由于人们目前还无法预知一个进程在内存的若干个页面中,哪一个页面是未来最长时间内不再被访问的,因而该算法是无法实现的,但可以利用该算法去评价其它算法。算法过程现举例说明如下。       假定系统为某进程

2015-06-15 21:01:22 2363

转载 LevelDB原理探究和代码分析(下)

3.文件结构3.1 文件组成Level DB包含一下几种文件:文件类型说明dbname/MANIFEST-[0-9]+  清单文件            dbname/[0-9]+.logdb日志文件dbname/[0-9]+.sstdbtable文件dbname/[

2015-06-14 21:31:51 1852

转载 LevelDB原理探究与代码分析(上)

1.概述LevelDB(http://code.google.com/p/leveldb/)是google开源的Key/Value存储系统,它的committer阵容相当强大,基本上是bigtable的原班人马,包括像jeff dean这样的大牛,它的代码合设计非常具有借鉴意义,是一种典型的LSM Tree的KV引擎的实现,从它的数据结构来看,基本就是sstable的开源实现,而且

2015-06-14 20:34:04 3102

原创 LevelDB学习笔记

What Is LevelDB• LevelDB is a fast key-value storage library written at Google that provides an ordered mapping from string keys to string values.– A Fast And Lightweight KV Storage Library , No

2015-06-14 16:32:34 2174

原创 Linux常用网络命令(三)

rlogin作用 rlogin是”remote login”(远程登录)的缩写。该命令与telnet命令很相似,允许用户启动远程系统上的交互命令会话。rlogin的一般格式是: rlogin [-8EKLdx][-e char][-k realm][-l username] host格式 一般最常用的格式是:rlogin host 各选项的含义为: -8 此选项允许8位输入数据通道。

2015-06-03 14:58:38 601

原创 Linux常用网络命令(二)

nslookup作用 nslookup命令的功能是查询一台机器的IP地址和其对应的域名。 使用权限所有用户。它通常需要一台域名服务器来提供域名服务。如果用户已经设置好域名服务器,就可以用这个命令查看不同主机的IP地址对应的域名。格式 nslookup [IP地址/域名]应用实例 (1)、在本地计算机上使用nslookup命令 $nslookup 在符号 “>” 后面输入要查询的IP

2015-06-03 10:38:25 564

原创 Linux常用网络命令(一)

主要内容常用网络命令ifconfigpingnetstatnslookuproutetraceroutetelnetftprloginrshrcpfinger网络配置文档**ifconfig功能说明:显示或配置网络设备语法:ifconfig[网络设备][down up -allmulti -arp -promisc][add][del][][io_addr][irq][

2015-06-02 19:40:08 682

原创 Effective STL 第7条:如果容器中包含了通过new操作创建的指针,切记在容器对象析构前将指针delete掉

STL中的容器相当“聪明”,它们提供了迭代器,以便进行向后和向前的遍历(通过begin、end、rbegin等);它们告诉你所包含的元素类型(通过它们的value_type类型定义);在插入和删除的过程中,它们自己进行必要的内存管理;它们报告自己有多少对象,最多能容纳多少对象(分别通过size和max_size);当然,当它们自身被析构时,它们自动析构所包含的每个对象。       有了这么“

2014-12-21 22:31:47 1442

原创 Effective STL 第5条:区间成员函数优先于与之对应的单元素成员函数

使用区间成员函数而不是其相应的单元素成员函数的原因:l 通过使用区间成员函数,通常可以少写一些代码。l 使用区间成员函数通常会得到意图清晰和更加直接的代码。l 在一般情况下,效率更高。 区间操作有以下几种:区间创建。所有的标准容器都提供了如下形式的构造函数:container::container (InputIteratorbegin, InputIter

2014-12-21 21:13:19 754

原创 Effective STL 第2、3、4条

第2条:不要试图编写独立于容器类型的代码第3条:确保容器中的对象副本正确而高效       容器中保存了对象,但并不是你提供给容器的那些对象。而当从容器中取出个对象时,你所取出的也并不是容器中所保存的那份。当向容器中加入对象时(通过insert或push_back之类的操作),存入容器的是你所指定的对象的副本。当(通过如front或back之类的操作)从容器中取出一个对象时,你所得到的是容

2014-12-21 20:06:52 636

原创 Effective STL 第1条:慎重选择容器类型

C++提供了几种不同的容器供我们选择,这里简单回顾一下:1、标准STL序列容器:vector、string、deque和list。2、标准STL关联容器:set、multiset、map、和multimap。3、非标准序列容器slist和rope。slist是一个单向链表,rope本质上是一“重型”string。4、非标准关联容器hash_set、hash_multiset、has

2014-12-21 19:38:09 976

原创 Effective STL 第12条:切勿对STL容器的线程安全性有不切实际的依赖

在多线程中,对一个STL实现,我们最多只能期望:1、多个线程读是安全的。多个线程可以同时读同一个容器的内容,并且保证是正确的。自然的,在读的过程中,不能对容器有任何写入操作。2、多个线程对不同的容器做写入操作是安全的。多个线程可以同时对不同的容器做写入操作。在一般情况下,我们可以有下面的解决方法:1、自己手工做同步控制。vector v;...getMu

2014-12-21 13:49:58 707

原创 慎重选择删除元素的方法

总结本条款,一共有以下几点是需要牢记的:1、要删除容器中有特定值的所有对象:(1)、如果容器是vector、string或deque,则使用erase-remove习惯用法。(2)、如果容器是list,则使用list::remove(3)、如果容器是标准关联容器,则使用它的erase成员函数。eg:  假定你有一个标注的STL容器c,它包含int类型的整数:Cont

2014-12-21 11:34:05 704

原创 矩阵连乘问题

矩阵连乘问题问题分析最优子结构性质假设n个矩阵连乘的最优加括号方案为(A1...Ak)(Ak+1...An))(注:此处省略了A1...Ak, Ak+1...An两个子矩阵内部的括号)。则加括号方案(A1...Ak)是子矩阵链A1...Ak的最优加括号方案,(Ak+1...An)是Ak+1...An的最优加括号方案。证明略。但可证明该假设成立。

2014-11-30 20:50:00 2593 1

原创 多段图最短路径

问题描述:设是一个赋权有向图,其顶点集V被划分为个不相交的子集,其中,V1和Vk分别只有一个顶点s(称为源)和一个顶点t(称为汇),所有的边(u,v)的始点和终点都在相邻的两个子集Vi和Vi+1中:, 且边(u,v)有一个正权重,记为.请设计一个算法,求解从源s到汇t的权重之和最小的路径。状态表示包含源s的子图都可以认为是一个子问题,子图的源是固

2014-11-30 16:42:46 12375

原创 动态规划的求解步骤

动态规划算法适合于求解最优化问题,通常可按下列步骤来设计动态规划算法:(1)分析最优解的性质,并刻画其最优子结构特征;(2)确定状态表示S(x1,x2,...)和状态递推方程,递归地定义最优值;(3)根据状态转移顺序,以自底向上的方式计算出最优值;(4)根据计算最优值时得到的信息,构造最优解。第(1)步是基础,也是关键。在分析最优子结构性

2014-11-30 13:48:09 9458

原创 在hadoop-2.4.0环境下安装mahout最新版

相对于快速安装来说,编译安装可能要相对麻烦点,首先,编译安装需要我们确保系统中已经安装了jdk1.6和maven3.0以上的版本才行。具体安装这里不说了:[root@localhostQiumingLu]# mvn -versionApacheMaven 3.1.1 (0728685237757ffbf44136acec0402957f723d9a; 2013-09-1723:22

2014-04-17 22:31:58 2528

原创 Hadoop-2.4.0安装和wordcount运行验证

以下描述了64位centos6.5机器下,安装32位hadoop-2.4.0,并通过运行系统自带的WordCount例子来验证服务正确性的步骤。建立目录/home/QiumingLu/hadoop-2.4.0,以后这个是hadoop的安装目录。安装hadoop-2.4.0,解压hadoop-2.4.0.tar.gz到目录/home/QiumingLu/had

2014-04-17 22:05:08 6822 9

mahout安装和测试

mahout的详细安装,包括编译安装和快速安装,能够在hadoop上测试算法。

2014-04-17

空空如也

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

TA关注的人

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