自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(110)
  • 收藏
  • 关注

转载 mysql 5.7的安装及权限设置

下载地址:https://dev.mysql.com/downloads/mysql/5.7.html#downloads linux MySQL5.7 rpm安装删除旧包:# rpm -qa | grep -i mysql# rpm -ev mysql-libs-* --nodeps安装rpm包:# rpm -ivh mysql-community-common-5...

2018-12-13 10:24:54 417

转载 oprofile使用札记

引言cpu无端占用高?应用程序响应慢?苦于没有分析的工具?oprofile利用cpu硬件层面提供的性能计数器(performance counter),通过计数采样,帮助我们从进程、函数、代码层面找出占用cpu的"罪魁祸首"。下面我们通过实例,了解oprofile的具体使用方法。 常用命令使用oprofile进行cpu使用情况检测,需要经过初始化、启动检测、导出检测数据、查看检...

2018-07-30 21:05:04 265

转载 redis的接口代码实例

在之前的博客中已经非常详细的介绍了Redis的各种操作命令、运行机制和服务器初始化参数配置。本篇博客是该系列博客中的最后一篇,在这里将给出基于Redis客户端组件访问并操作Redis服务器的代码示例。然而需要说明的是,由于Redis官方并未提供基于C接口的Windows平台客户端,因此下面的示例仅可运行于Linux/Unix平台。但是对于使用其它编程语言的开发者而言,如C#和Java,Redis则

2017-05-12 12:06:57 750

原创 gdbinit 利用python,支持打印各种容器中的元素

GDB attempts to use a python "pretty printer" and reports the following error:[Thread debugging using libthread_db enabled]Traceback (most recent call last):  File "/usr/local/lib64/libstdc++.

2015-06-23 16:45:37 1736

转载 CentOS 6.5 编译安装 gcc-4.9.2

首先 gcc 编译需要三个额外库,下载并按照下面的顺序安装它们,如下:1. gmp     ftp://ftp.gnu.org/gnu/gmp2. mpfr     ftp://ftp.gnu.org/gnu/mpfr3. mpc     http://www.multiprecision.org/mpc准备工作: 注:上次安装时,准备工作可以不做。1. 编译安装 gmp# tar -zxvf

2015-05-12 10:20:58 1141

转载 Libevent源码分析-----bufferevent工作流程探究

转载请注明出处:http://blog.csdn.net/luotuo44/article/details/39344743        和之前的《Libevent工作流程探究》一样,这里也是用一个例子来探究bufferevent的工作流程。具体的例子可以参考《Libevent使用例子,从简单到复杂》,这里就不列出了。其实要做的例子也就是bufferevent_s

2015-01-30 11:04:16 3366

转载 Libevent源码分析-----更多evbuffer操作函数

转载请注明出处:http://blog.csdn.net/luotuo44/article/details/39325447锁操作:        在前一篇博文可以看到很多函数在操作前都需要对这个evbuffer进行加锁。同event_base不同,如果evbuffer支持锁的话,要显式地调用函数evbuffer_enable_locking。

2015-01-30 11:02:42 2185

转载 Libevent源码分析-----evbuffer结构与基本操作

转载请注明出处:http://blog.csdn.net/luotuo44/article/details/39290721                        对于非阻塞IO的网络库来说,buffer几乎是必须的。Libevent在1.0版本之前就提供了buffer功能。现在来看一下Libevent的buffer。buffer相关结构体:

2015-01-30 11:01:13 2852

转载 Libevent源码分析-----连接监听器evconnlistener

使用evconnlistener:        基于event和event_base已经可以写一个CS模型了。但是对于服务器端来说,仍然需要用户自行调用socket、bind、listen、accept等步骤。这个过程有点繁琐,为此在2.0.2-alpha版本的Libevent推出了一些对应的封装函数。        用户只需初始化struct sockaddr_in结构体变

2015-01-22 17:59:17 4038

转载 Libevent源码分析-----通用类型和函数

Libevent定义了一系列的可移植的兼容类型和函数。这使得在各个系统上都有一致的效果,Libevent一般都会在兼容通用类型和函数的前面加上ev或evutil前缀。        在实现上,Libevent都是使用条件编译+宏定义的方式。使用这种方式,同一个宏名字,可以使得在不同的系统上, 编译时得到不同的值。这种方式在跨平台编程中,经常使用到。此外,对于Libevent的兼容类型,如果

2015-01-22 17:58:27 1018

转载 Libevent源码分析-----与event相关的一些函数和操作

Libevent提供了一些与event相关的操作函数和操作。本文就重点讲一下这方面的源代码。         在Libevent中,无论是event还是event_base,都是使用指针而不会使用变量。实际上,如果查看Libevent不同的版本,就可以发现event和event_base这两个结构体的成员是不同的。对比libevent-2.0.21-stable和libevent-

2015-01-22 17:57:49 537

转载 Libevent源码分析-----管理超时event

前面的博文已经说到,如果要对多个超时event同时进行监听,就要对这些超时event进行集中管理,能够方便地(时间复杂度小)获取、加入、删除一个event。        在之前的Libevent版本,Libevent使用小根堆管理这些超时event。小根堆的插入和删除时间复杂度都是O(logN)。在2.0.4-alpha版本时,Libevent引入了一个叫common-timeout的东

2015-01-22 17:57:39 1053

转载 Libevent源码分析-----Libevent时间管理

基本时间操作函数:        Libevent采用的时间类型是struct  timeval,这个类型在很多平台都提供了。此外,Libevent还提供了一系列的时间操作函数。比如两个struct timeval相加、相减、比较大小。有些平台直接提供了一些时间操作函数,但有些则没有,那么Libevent就自己实现。这些宏如下:[cpp] view plainc

2015-01-22 17:56:49 1251

转载 Libevent源码分析-----超时event的处理

如何成为超时event:                Libevent允许创建一个超时event,使用evtimer_new宏。[cpp] view plaincopy//event.h文件  #define evtimer_new(b, cb, arg)        event_new((b), -1, 0, (cb), (

2015-01-22 17:56:02 2916

转载 Libevent源码分析-----evthread_notify_base通知主线程

一般来说,是主线程执行event_base_dispatch函数。本文也是如此,如无特别说明,event_base_dispatch函数是由主线程执行的。notify的理由:        本文要说明的问题是,当主线程在执行event_base_dispatch进入多路IO复用函数时,会处于休眠状态,休眠前解锁。此时,其他线程可能想往event_base添加一个event,

2015-01-22 17:55:20 1529

转载 Libevent源码分析-----信号event的处理

信号event的工作原理:        前面讲解了Libevent怎么对一个IO事件进行监听,现在来讲一下Libevent怎么监听信号。Libevent对于信号的处理是采用统一事件源的方式。简单地说,就是把信号也转换成IO事件,集成到Libevent中。        统一事件源的工作原理是这样的:假如用户要监听SIGINT这个信号,那么在实现的内部就对SIGINT这个信号设置捕

2015-01-22 17:53:52 2037

转载 Libevent源码分析-----event优先级设置

event_base允许用户对它里面的event设置优先级,这样可以使得有些更重要的event能够得到优先处理。        Libevent实现优先级功能的方法是:用一个激活队列数组来存放激活event。即数组的元素是一个激活队列,所以有多个激活队列。并且规定不同的队列有不同的优先级。        可以通过event_base_priority_init函数设

2015-01-22 17:52:48 619

转载 Libevent源码分析-----Libevent工作流程探究

之前的博文讲了很多Libevent的基础构件,现在以一个实际例子来初步探究Libevent的基本工作流程。由于还有很多Libevent的细节并没有讲所以,这里的探究还是比较简洁,例子也相当简单。[cpp] view plaincopy#include  #include  #include  #include      

2015-01-22 17:52:23 647

转载 Libevent源码分析-----跨平台Reactor接口的实现

之前的博文讲了怎么实现线程、锁、内存分配、日志等功能的跨平台。Libevent最重要的跨平台功能还是实现了多路IO接口的跨平台(即Reactor模式)。这使得用户可以在不同的平台使用统一的接口。这篇博文就是来讲解Libevent是怎么实现这一点的。        Libevent在实现线程、内存分配、日志时,都是使用了函数指针和全局变量。在实现多路IO接口上时,Libevent也采用了这种

2015-01-22 17:50:14 1201

转载 Libevent源码分析-----配置event_base

前面的博文都是讲一些Libevent的一些辅助结构,现在来讲一下关键结构体:event_base。         这里作一个提醒,在阅读Libevent源码时,会经常看到backend这个单词。其直译是“后端”。实际上其指的是Libevent内部使用的多路IO复用函数,多路IO复用函数就是select、poll、epoll这类函数。本系列博文中,为了叙述方便,“多路IO复用函数”

2015-01-22 17:49:22 742

转载 Libevent源码分析-----event_io_map哈希表

上一篇博客说到了TAILQ_QUEUE队列,它可以把多个event结构体连在一起。是一种归类方式。本文也将讲解一种将event归类、连在一起的结构:哈希结构。哈希结构体:        哈希结构由下面几个结构体一起配合工作:[cpp] view plaincopystruct event_list  {

2015-01-22 17:41:40 1047 1

转载 Libevent源码分析-----TAILQ_QUEUE队列

Libevent源码中有一个queue.h文件,位于compat/sys目录下。该文件里面定义了5个数据结构,其中TAILQ_QUEUE是使得最广泛的。本文就说一下这个数据结构。队列结构体:        TAILQ_QUEUE由下面两个结构体一起配合工作。[cpp] view plaincopy#define TAI

2015-01-22 17:36:54 796

转载 Libevent源码分析-----多线程、锁、条件变量(二)

Debug锁操作:               Libevent还支持对锁操作的一些检测,进而捕抓一些典型的锁错误。Libevent检查:解锁自己(线程)没有持有的锁在未解锁前,自己(线程)再次锁定一个非递归锁。        Libevent通过一些变量记录锁的使用情况,当检查到这些锁的错误使用时,就调用abort,退出运行。开启调试功能:

2015-01-22 17:36:12 1361

转载 Libevent源码分析-----多线程、锁、条件变量(一)

Libevent提供给用户的可见多线程API都在thread.h文件中。在这个文件提供的API并不多。基本上都是一些定制函数,像前面几篇博文说到的,可以为Libevent定制用户自己的多线程函数。开启多线程:        Libevent默认是不开启多线程的,也没有锁、条件变量这些东西。这点和前面博客说到的"没有定制就用Libevent默认提供",有所不同。只有当你调用了

2015-01-22 17:35:34 837

转载 Libevent源码分析-----内存分配

Libevent的内存分配函数还是比较简单的,并没有定义内存池之类的东西。如同前一篇博客那样,给予Libevent库的使用者充分的设置权(定制),即可以设置用户(Libevent库的使用者)自己的内存分配函数。至于怎么分配,主动权在于用户。但在设置(定制)的时候要注意一些地方,下面会说到。        首先,如果要定制自己的内存分配函数,就得在一开始配置编译Libevent库是,不能加入

2015-01-22 17:34:23 1116

转载 Libevent源码分析-----日志和错误处理

日志处理:        在Libevent的源码中,经常会见到形如event_warn、event_msgx、event_err之类的函数。这通常出现在代码中一些值是不合理时。这些函数就是Libevent的日志函数。它能把这些不合理的情况打印出来,告知用户。定制日志回调函数:        Libevent在默认情况下,会将这些日志信息输出到终端上。这当然就不利于日后的观察。

2015-01-22 17:34:22 670

转载 Libevent源码分析-----event-config.h指明所在系统的环境

如果你打开Libevent的一些文件,比如util.h文件。就会发现使用了很多宏定义,并根据一些宏定义而进行条件编译。这些宏定义往往来自event-config.h文件中。        如util.h文件的代码开始处:[cpp] view plaincopy#ifdef _EVENT_HAVE_SYS_TIME_H  #incl

2015-01-22 17:33:47 802

转载 Libevent源码分析-----开篇

我所分析的Libevent版本是2.0.21版本,是目前最新的稳定版本。看这系列博文中,需要读者有Linux编程的一些基础。因为像POSIX、文件描述符、多线程等等这些概念,我并不会去解释,我默认读者已经熟悉这些概念了。如果读者读过《UNIX环境高级编程》,那就完全没问题了。        因为Libevent是跨平台的,所以它使用了很多它自己定义的通用跨平台类型,比如evutil_soc

2015-01-22 17:32:23 841

原创 yum 安装软件汇总

yum时提示Couldn't resolve host 'mirrorlist.centos.org'解决方法解决办法    1,执行    echo "nameserver 8.8.8.8" > /etc/resolv.conf    设置dns服务器    即可vim:  yum install vimgcc:  yum inst

2014-11-26 19:15:02 552

转载 U盘安装centos6.5教程(两种实现方法)

从centOS6.5开始直接把iso文件写入u盘就行了。 下载地址为:http://www.jb51.net/softs/118841.htmlwindows平台: 1.用UltraISO打开iso(如:CentOS-6.5-x86_64-bin-DVD1.iso) 2.然后点“启动”->"写入硬盘映像",硬盘驱动器是你的u盘,映像文件安装光盘iso,写入方式是USB-

2014-11-26 13:57:21 2247

转载 CentOS 6.5系统安装配置图解教程(详细图文)

截止目前CentOS 6.x最新版本为CentOS 6.5,下面介绍CentOS 6.5的具体安装配置过程服务器相关设置如下:操作系统:CentOS 6.5 64位IP地址:192.168.21.129网关:192.168.21.2DNS:8.8.8.8 8.8.4.4备注:CentOS 6.5系统镜像有32位和64位两个版本,生产服务器如果是大内存(4G以上内存)

2014-11-24 10:27:07 642

转载 MySQL的mysqldump工具的基本用法

导出要用到MySQL的mysqldump工具,基本用法是:   shell> mysqldump [OPTIONS] database [tables]   如果你不给定任何表,整个数据库将被导出。   通过执行mysqldump --help,你能得到你mysqldump的版本支持的选项表。   注意,如果你运行mysqldump没有--quick或--opt选项

2014-09-29 16:03:09 335

转载 Linux配置hiredis

Hiredis是redis开源库对C语言接口的API开发库。1. 初学者很容易搞混,redis-server redis-client都是应用程序,跟开发接口不相关。http://redis.io/download 中介绍的InstallationDownload, extract and compile Redis with:$ wget http://d

2014-09-28 16:30:43 7382

转载 初学Redis(1)——认识Redis

Redis官网对Redis的定义是:“Redis is an open source, BSD licensed, advanced key-value cache and store”,可以看出,Redis是一种键值系统,可以用来缓存或存储数据。Redis是“Remote Dictionary Server”(远程字典服务)的缩写,提供了字符串(string),列表(list),哈希(hash)

2014-09-26 17:41:21 499

转载 初学Redis(4)——简单实现Redis缓存中的排序功能

在实现缓存排序功能之前,必须先明白这一功能的合理性。不妨思考一下,既然可以在数据库中排序,为什么还要把排序功能放在缓存中实现呢?这里简单总结了两个原因:首先,排序会增加数据库的负载,难以支撑高并发的应用;其次,在缓存中排序不会遇到表锁定的问题。Redis恰好提供了排序功能,使我们可以方便地实现缓存排序。        Redis中用于实现排序功能的是SORT命令。该命令提供了多种参数,可以

2014-09-26 17:40:35 558

转载 初学Redis(2)——用Redis作为Mysql数据库的缓存

用Redis作Mysql数据库缓存,必须解决2个问题。首先,应该确定用何种数据结构存储来自Mysql的数据;在确定数据结构之后,还要考虑用什么标识作为该数据结构的键。        直观上看,Mysql中的数据都是按表存储的;更微观地看,这些表都是按行存储的。每执行一次select查询,Mysql都会返回一个结果集,这个结果集由若干行组成。所以,一个自然而然的想法就是在Redis中找到一种

2014-09-26 17:38:35 688

转载 初学Redis(3)——用Redis作为Mysql数据库的缓存

把Mysql结果集缓存到Redis的字符串或哈希结构中以后,我们面临一个新的问题,即如何为这些字符串或哈希命名,也就是如何确定它们的键。因为这些数据结构所对应的行都属于某个结果集,假如可以找到一种唯一标识结果集的方法,那么只需为这些数据结构分配一个唯一的序号,然后把结果集标识符与该序号结合起来,就能唯一标识一个数据结构了。于是,为字符串和哈希命名的问题就转化为确定结果集标识符的问题。   

2014-09-26 17:38:04 608

转载 Redis安装部署

Redis是一种高级key-value数据库。它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富。有字符串,链表,集 合和有序集合。支持在服务器端计算集合的并,交和补集(difference)等,还支持多种排序功能。所以Redis也可以被看成是一个数据结构服务 器。Redis的所有数据都是保存在内存中,然后不定期的通过异步方式保存到磁盘上(这称为“半持久化模式”)

2014-09-25 15:28:05 346

转载 event_new

truct event *event_new(struct event_base *, evutil_socket_t, short, event_callback_fn, void *);分配并初始化一个新的event结构体,准备被添加。该函数返回一个新的event,可以被用来event_add或者event_del。Fd和events参数决定了哪些情况会触发事件;callbac

2014-09-24 17:39:33 2118

转载 【Linux 开发】Libevent事件处理机制及实例

可以利用Libevent库做命令行解析及命令执行结果反馈可以利用Libevent库做定时器使用在sslsplit中使用了此库作为事件处理,如连接建立,内容读取转换等。一、Libevent简介    libevent是一个基于事件触发的网络库,适用于windows、linux、bsd等多种平台,内部使用select、epoll、kqueue等系统调用管

2014-09-22 11:54:27 1258

空空如也

空空如也

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

TA关注的人

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