- 博客(1281)
- 资源 (7)
- 收藏
- 关注
原创 透过 Linux 内核看无锁编程
非阻塞型同步 (Non-blocking Synchronization) 简介如何正确有效的保护共享数据是编写并行程序必须面临的一个难题,通常的手段就是同步。同步可分为阻塞型同步(Blocking Synchronization)和非阻塞型同步( Non-blocking Synchronization)。阻塞型同步是指当一个线程到达临界区时,因另外一个线程已经持有访问该共享数据
2016-05-24 19:48:15 3707
原创 如何快速又正确地在C++里实现锁
正确答案是 不要自己实现 。从C++11开始,STL已经提供了multithreading相关的设施,包括锁这种基本的同步设施;如果很不幸的,你的生产环境被三体人锁在了C++98/03,那么你可以考虑使用boost。这个看起来乱糟糟的准标准库也提供了相关的同步设施,而且用起来的体验还和C++11的标准库非常相像。当然,如果文章到这里就结束的话,不免有些标题党之嫌。所以,我们还是要讨
2016-05-23 19:56:27 5135
原创 hash_map中string为key的解决方法
当hash_map中使用string为key时,需用户扩展命名空间,否则报错如下:/usr/lib/gcc/x86_64-redhat-linux/3.4.5/../../../../include/c++/3.4.5/ext/hashtable.h:518: error: no match for call to `(const __gnu_cxx::hash) (const std::
2016-05-19 16:47:40 3307
原创 Linux C++程序进行性能分析工具gprof使用入门
性能分析工具软件的性能是软件质量的重要考察点,不论是在线服务程序还是离线程序,甚至是终端应用,性能都是用户体验的关键。这里说的性能重大的范畴来讲包括了性能和稳定性两个方面,我们在做软件测试的时候也是要重点测试版本的性能表现和稳定性的。对于软件测试过程中发现的性能问题,如何定位有很多的方法。基本的方法可能是开发者对代码进行review,或者是使用一些工具对代码进行性能分析。常见的性能分析tu
2016-04-29 16:25:07 6556 1
原创 netstat 的10个基本用法
Netstat 简介Netstat 是一款命令行工具,可用于列出系统上所有的网络套接字连接情况,包括 tcp, udp 以及 unix 套接字,另外它还能列出处于监听状态(即等待接入请求)的套接字。如果你想确认系统上的 Web 服务有没有起来,你可以查看80端口有没有打开。以上功能使 netstat 成为网管和系统管理员的必备利器。在这篇教程中,我会列出几个例子,教大家如何使用 netst
2016-04-29 15:59:54 1013
原创 gprof的性能优化实践
内容目录:1 Gprof2. gprof使用步骤1.初始化大对象耗时2.Map使用不当优化准则:1. 二八法则:在任何一组东西中,最重要的只占其中一小部分,约20%,其余80%的尽管是多数,却是次要的;在优化实践中,我们将精力集中在优化那20%最耗时的代码上,整体性能将有显著的提升;这个很好理解。函数A虽然代码量大,但在一次正常执行流程中,只调用了一次。而另一个函数B代
2016-04-26 18:58:10 1286
原创 Linux下多线程查看工具(pstree、ps、pstack)
1. pstreepstree以树结构显示进程$ pstree -p work | grep adsshd(22669)---bash(22670)---ad_preprocess(4551)-+-{ad_preprocess}(4552) |-{ad_preprocess}(4553
2016-04-26 18:40:06 3981
原创 【MySQL】计算 TPS,QPS 的方式
在做db基准测试的时候,qps,tps 是衡量数据库性能的关键指标。本文比较了网上的两种计算方式。先来了解一下相关概念。概念介绍:QPS:Queries Per Second 查询量/秒,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理查询量多少的衡量标准。TPS : Transactions Per Second 是事务
2016-04-20 10:29:46 5495
原创 系统吞吐量、TPS(QPS)、用户并发量、性能测试概念和公式
PS:下面是性能测试的主要概念和计算公式,记录下:一.系统吞度量要素: 一个系统的吞度量(承压能力)与request对CPU的消耗、外部接口、IO等等紧密关联。单个reqeust 对CPU消耗越高,外部系统接口、IO影响速度越慢,系统吞吐能力越低,反之越高。系统吞吐量几个重要参数:QPS(TPS)、并发数、响应时间 QPS(TPS):每秒钟reque
2016-04-20 10:29:07 3140
原创 apache的ab命令做压力测试
1、命令格式ab命令放在apache目录bin目录下面,使用方法如下./ab -n 3000 -c 3000 http://www.test.com/其中-n代表每次并发量,-c代表总共发送的数量2、测试结果分析[root@Svr107 bin]# ./ab -n 3000 -c 3000 http://www.test.com/ This i
2016-04-19 15:19:22 1522
原创 C++库汇总
C++类库介绍再次体现了C++保持核心语言的效率同时大力发展应用库的发展趋势!!在C++中,库的地位是非常高的。C++之父 Bjarne Stroustrup先生多次表示了设计库来扩充功能要好过设计更多的语法的言论。现实中,C++的库门类繁多,解决的问题也是极其广泛,库从轻量级到重量级的都有。不少都是让人眼界大开,亦或是望而生叹的思维杰作。由于库的数量非常庞大,而且限于笔者水平,其中很多并不了
2016-04-12 10:16:22 1488
原创 灵活使用getconf命令来获取系统信息
我们时常需要查询系统相关的信息,比如页面大小,整数大小之类,如果编写程序去计算会比较繁琐,这里有一个很有用的命令,可以用来获取系统相关信息。它就是getconf。$ getconf PAGE_SIZE4096$ getconf INT_MAX2147483647可以取得的相关信息如下(参考相关资料,在又在版本上会有些不同):_CS
2016-04-08 17:16:14 2719
原创 muduo源码阅读
最近简单读了下muduo的源码,本文对其主要实现/结构简单总结下。muduo的主要源码位于net文件夹下,base文件夹是一些基础代码,不影响理解网络部分的实现。muduo主要类包括:EventLoopChannelPollerTcpConnectionTcpClientTcpServerConnectorAcceptorEventLoopThreadEventLoopThread
2016-04-07 15:51:46 1887
原创 muduo网络库使用心得
上个月看了朋友推荐的mudo网络库,下完代码得知是国内同行的开源作品,甚是敬佩。下了mudo使用手册和035版的代码看了下结构,感觉是一个比较成熟而且方便使用的网络库。本人手头也有自己的网络库,虽然不敢说是一个多强大的网络库,但毕竟在外网也稳定运营了几年,多组同时在线也跑过30w左右,单组服务器也能跑上w人。做游戏服务器几年的经验,感觉稳定性才是网游服务器最核心最重要的环节,效率还在其次,这也是目
2016-04-07 15:49:17 2853
原创 Linux查看机器负载
负载(load)是linux机器的一个重要指标,直观了反应了机器当前的状态。如果机器负载过高,那么对机器的操作将难以进行。Linux的负载高,主要是由于CPU使用、内存使用、IO消耗三部分构成。任意一项使用过多,都将导致服务器负载的急剧攀升。查看服务器负载有多种命令,w或者uptime都可以直接展示负载,$ uptime12:20:30 up 44 days, 21:46
2016-04-07 14:58:44 5171 1
原创 模板类的继承
模板类的继承包括四种:1.(普通类继承模板类)[cpp] view plain copy templateclass T> class TBase{ T data; …… }; class Derived:public TBaseint>{ …… }; 2
2016-02-23 17:25:50 7104
原创 递归模板模式
一、命名模板参数: 有些高级脚本语言,如Perl、PL/SQL等,他们的函数参数在调用时都支持命名参数,既在调用时可以不按照顺序传递参数,而是p可以按照参数的名字传递。先看下面的代码示例: template typename Policy2 = DefaultPolicy2, typename Policy3 = De
2016-02-23 17:24:24 2830
原创 Centos 执行top命令详细解读
1.作用top命令用来显示执行中的程序进程,使用权限是所有用户。 2.格式top [-] [d delay] [q] [c] [S] [s] [i] [n] 3.主要参数d:指定更新的间隔,以秒计算。q:没有任何延迟的更新。如果使用者有超级用户,则top命令将会以最高的优先序执行。c:显示进程完整的路径与名称。S:累积
2016-02-22 20:19:41 1188
原创 MySQL: InnoDB 还是 MyISAM?
MyISAM存储引擎 MyISAM是 默认存储引擎。它基于更老的ISAM代码,但有很多有用的扩展。MyISAM存储引擎的一些特征: 所有数据值先存储低字节。这使得数据机和操作系统分离。二进制轻便性的唯一要求是机器使用补码(如最近20年的机器有的一样)和IEEE浮点格式(在主流机器中也完全是主导的)。唯一不支持二进制兼容性的机器是嵌入式系统。这些系统有时使用特殊的处理器
2016-02-18 15:06:05 552
原创 19个MySQL性能优化要点解析
以下就是跟大家分享的19个MySQL性能优化主要要点,一起学习学习。1、为查询优化你的查询大多数的MySQL服务器都开启了查询缓存。这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的。当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一个缓存中,这样,后续的相同的查询就不用操作表而直接访问缓存结果了。这里最主要的问题是,对于程序员来说,这个事情是很容易被忽略的。
2016-02-18 14:19:28 650
原创 Redis键值设计
丰富的数据结构使得redis的设计非常的有趣。不像关系型数据库那样,DEV和DBA需要深度沟通,review每行sql语句,也不像memcached那样,不需要DBA的参与。redis的DBA需要熟悉数据结构,并能了解使用场景。下面举一些常见适合kv数据库的例子来谈谈键值的设计,并与关系型数据库做一个对比,发现关系型的不足之处。用户登录系统记录用户登录信息的一个系统, 我们
2016-02-03 19:02:06 739
原创 负载均衡算法
互联网分布式系统中,很多服务是数据存储相关的,海量访问量下,直接访问存储介质是抗不住的,需要使用cache,cache集群的负载均衡算法就成为一个重要的话题,这里对现有的负载均衡算法进行一些总结。BTW:虽然是Cache负载均衡算法小结,其实可以说是负载均衡算法小结,只是针对Cache应用场景罢了。负载均衡算法主要有:Static算法Random算法Round ro
2016-02-02 20:17:28 946
原创 五分钟理解一致性哈希算法(consistent hashing)
一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似。一致性哈希修正了CARP使用的简 单哈希算法带来的问题,使得分布式哈希(DHT)可以在P2P环境中真正得到应用。 一致性hash算法提出了在动态变化的Cache环境中,判定哈希算法好坏的四个定义:1
2016-02-02 20:04:43 935
原创 Memcached使用手册
memcached简介1 、 memcached 是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的 hash 表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。2 、它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。 3 、 Memcached 基于一个存储键 / 值对的 hashmap 。
2016-02-02 19:39:00 817
原创 Memcached配置参数初解
一、基本参数在我们第一次安装Memcached时,一般都是用过这个命令: memcached -m 512 -u root -d -l 127.0.0.1 -p 11211 我们先来解释这几个参数的含义吧。-m 指定缓存所使用的最大内存容量,单位是Megabytes,默认是64MB-u 只有以ro
2016-02-02 10:30:50 966
原创 Redis工作系列之一 与 Memcached对比理解
近期公司项目在使用Redis,这几年Redis很火,Redis也常常被当作Memcached的挑战者被提到桌面上来。关于Redis与Memcached的比较更是比比皆是。然而,Redis真的在功能、性能以及内存使用效率上都超越了Memcached吗?You should not care too much about performances. Redis is faster pe
2016-02-01 20:03:14 586
原创 Redis学习手册(Key操作命令)
一、概述: 在该系列的前几篇博客中,主要讲述的是与Redis数据类型相关的命令,如String、List、Set、Hashes和Sorted-Set。这些命令都具有一个共同点,即所有的操作都是针对与Key关联的Value的。而该篇博客将主要讲述与Key相关的Redis命令。学习这些命令对于学习Redis是非常重要的基础,也是能够充分挖掘Redis潜力的利器。 在该篇
2016-02-01 14:03:38 527
原创 Redis学习手册(Sorted-Sets数据类型)
一、概述: Sorted-Sets和Sets类型极为相似,它们都是字符串的集合,都不允许重复的成员出现在一个Set中。它们之间的主要差别是Sorted-Sets中的每一个成员都会有一个分数(score)与之关联,Redis正是通过分数来为集合中的成员进行从小到大的排序。然而需要额外指出的是,尽管Sorted-Sets中的成员必须是唯一的,但是分数(score)却是可以重复的。
2016-02-01 14:00:58 690
原创 Redis学习手册(Set数据类型)
一、概述: 在Redis中,我们可以将Set类型看作为没有排序的字符集合,和List类型一样,我们也可以在该类型的数据值上执行添加、删除或判断某一元素是否存在等操作。需要说明的是,这些操作的时间复杂度为O(1),即常量时间内完成次操作。Set可包含的最大元素数量是4294967295。 和List类型不同的是,Set集合中不允许出现重复的元素,这一点和C++标准库中
2016-02-01 14:00:10 661
原创 Redis学习手册(Hashes数据类型)
一、概述: 我们可以将Redis中的Hashes类型看成具有String Key和String Value的map容器。所以该类型非常适合于存储值对象的信息。如Username、Password和Age等。如果Hash中包含很少的字段,那么该类型的数据也将仅占用很少的磁盘空间。每一个Hash可以存储4294967295个键值对。二、相关命令列表:命令原
2016-02-01 13:59:34 826
原创 Redis学习手册(List数据类型)
一、概述: 在Redis中,List类型是按照插入顺序排序的字符串链表。和数据结构中的普通链表一样,我们可以在其头部(left)和尾部(right)添加新的元素。在插入时,如果该键并不存在,Redis将为该键创建一个新的链表。与此相反,如果链表中所有的元素均被移除,那么该键也将会被从数据库中删除。List中可以包含的最大元素数量是4294967295。 从元素插入和
2016-02-01 13:58:33 415
原创 Redis学习手册(String数据类型)
一、概述: 字符串类型是Redis中最为基础的数据存储类型,它在Redis中是二进制安全的,这便意味着该类型可以接受任何格式的数据,如JPEG图像数据或Json对象描述信息等。在Redis中字符串类型的Value最多可以容纳的数据长度是512M。二、相关命令列表:命令原型时间复杂度命令描述返回值APPENDkey
2016-02-01 13:57:24 516
原创 Linux如何实现开机启动程序详解
核心提示:系统的服务在开机时一般都可以自动启动,那在linux系统下如果想要程序在开机时自动启动怎么办?我们知道在 windows系统“开始”-->“所有程序”-->“启动”里面放个快捷方式就行,那Linux系统下呢?...系统的服务在开机时一般都可以自动启动,那在linux系统下如果想要程序在开机时自动启动怎么办?我们知道在 windows系统“开始”-->“所有程序”-->“启动”里面放个快捷
2016-01-29 11:30:38 3666
原创 深入浅出RPC——深入篇
「解析 RPC 的本质。」《深入篇》我们主要围绕 RPC 的功能目标和实现考量去展开,一个基本的 RPC 框架应该提供什么功能,满足什么要求以及如何去实现它?RPC 功能目标RPC 的主要功能目标是让构建分布式计算(应用)更容易,在提供强大的远程调用能力时不损失本地调用的语义简洁性。 为实现该目标,RPC 框架需提供一种透明调用机制让使用者不必显式的区分本地调用和远程调用,
2016-01-27 19:51:40 925
原创 深入浅出RPC——浅出篇
「揭开 RPC 的面纱。」近几年的项目中,服务化和微服务化渐渐成为中大型分布式系统架构的主流方式,而 RPC 在其中扮演着关键的作用。 在平时的日常开发中我们都在隐式或显式的使用 RPC,一些刚入行的程序员会感觉 RPC 比较神秘,而一些有多年使用 RPC 经验的程序员虽然使用经验丰富,但有些对其原理也不甚了了。 缺乏对原理层面的理解,往往也会造成开发中的一些误用。本文分上下两篇《
2016-01-27 19:37:35 642
原创 分布式存储概述
分布式存储是相对于单机存储而言,之所以要分布自然是因为互联网时代信息数据大爆炸,单机已经难以满足大型应用的数据存储需求。存储系统的关注点关于存储系统,一般我们关注下面几个方面:数据分布与负载均衡数据存储的可靠性与一致性数据访问性能系统容错能力系统扩展能力在单机存储系统中有一种独立磁盘冗余阵列(RAID,redundant array of independent d
2016-01-27 19:25:23 1323
原创 在vs2008中添加已经分好目录结构的源码
知道后,很简单;不知道,也费了1个多小时,本来是个小事,为了这个小事而浪费1个小时不值得,所以在这里记录下:1、从这里进入:file_project_from_exiting_code2、定位好代码类型(vc++),选好原始代码所在位置,一路next,如果只是用vs来阅读代码,其他的配置项保持默认不设置也可以;3、
2016-01-27 16:26:26 1293
原创 几种经典的网络服务器架构模型的分析与比较
前言事件驱动为广大的程序员所熟悉,其最为人津津乐道的是在图形化界面编程中的应用;事实上,在网络编程中事件驱动也被广泛使用,并大规模部署在高连接 数高吞吐量的服务器程序中,如 http 服务器程序、ftp 服务器程序等。相比于传统的网络编程方式,事件驱动能够极大的降低资源占用,增大服务接待能力,并提高网络传输效率。关于本文提及的服务器模型,搜索网络可以查阅到很多的实现代码,所以,本文
2016-01-22 11:49:28 725
原创 linux下检查内存泄露的工具--mtrace
最令linux程序员头疼的莫过于内存泄露了,即使你是在优秀的程序员,你也不能保证所以的malloc操作都有对应的free,那必要的工具就是必不可少的了。在一般的linux发行版中,有一个自带的工具可以很方便的替你完成这些事,这个工具就是mtrace。 下面是它的用法[cpp] view plaincopy#include
2016-01-12 17:53:47 1330
原创 linux和STL 常用头文件及说明
1、 Linux中一些头文件的作用::ANSI C。提供断言,assert(表达式):GCC。GTK,GNOME的基础库,提供很多有用的函数,如有数据结构操作函数。使用glib只需要包含:GCC。文件夹操作函数。struct dirent,struct DIR,opendir(),closedir(),readdir(),readdir64()等 :ANSI C。字符测试函
2016-01-08 17:43:12 3077
数据结构实验课的全部源程序
2009-08-31
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人