自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

我想成为摄影家

一个既不会编程也不会摄影,本科电子专业,研究生通信专业,工作计算机方向的有理想的青年

  • 博客(56)
  • 收藏
  • 关注

原创 redis源码阅读(3)-解析客户端请求

客户端连接server端之后,server端会注册client 读事件,以检测客户端的 写操作,回调函数是: readQueryFromClient函数用来读取客户端的请求命令行数据,并调用processInputBuffer函数依照redis通讯协议对数据进行解析。服务器使用最原始的read函数来读取客户端发送来的请求命令,并将字符串存储在querybuf中,根据需要对querybuf进行扩展。

2016-11-18 20:11:25 1418

转载 redis源码阅读(2)-redis通信协议

Redis 通讯协议规范redis是一个key-value形式的基于内存的数据库当安装完程序后我们知道可以用redis-cli连接redis-server进行通讯,进行各种操作。 那么如今我们用的高级语言 如:C、Java、Python、C#等 如何来发送命令(request)来操作数据、从数据库取到相关数据(replies)呢?如果你也有这些疑问,那么这篇文章适合你继续看 ;)ps:官网已经推荐

2016-11-18 18:30:20 792

原创 redis源码阅读(1):redis服务网络模型

项目项目中应用到了redis,对其基于内存的nosql数据库比较感兴趣,打算读一下redis源码,写到哪里算哪里。第一篇是关于redis的网络模型:redis网络模型采用epoll 异步事件处理机制,针对客户端的读写均是采用单线程的形式操作,于是不存在数据安全性的问题,即多个客户端同时修改某一个相同的key。为什么采用单线程模型,也许是因为redis针对数据的操作均是基于内存操作,没有涉及到磁盘I/

2016-11-18 17:17:12 935

原创 python队列queue模块详解

队列queue 多应用在多线程应用中,多线程访问共享变量。对于多线程而言,访问共享变量时,队列queue是线程安全的。从queue队列的具体实现中,可以看出queue使用了1个线程互斥锁(pthread.Lock()),以及3个条件标量(pthread.condition()),来保证了线程安全。queue队列的互斥锁和条件变量,可以参考另一篇文章:python线程中同步锁queue的用法

2016-08-22 13:55:21 38742 1

原创 python 线程池threadpool之实现

上一节介绍了线程池threadpool的安装和使用,本节将主要介绍线程池工作的主要流程: (1)线程池的创建 (2)任务的创建 (3)任务的推送到线程池 (4)线程处理任务 (5)线程池的退出

2016-08-20 05:24:04 17395

原创 python 线程池threadpool(使用篇)

可以使用python语言自己实现线程池,或者可以使用第三方包threadpool线程池包,本主题主要介绍threadpool的使用以及其里面的具体实现。

2016-08-20 02:44:23 76445 1

原创 redis源码阅读(8)-AOF持久化

AOF 持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集。 AOF 文件中的命令全部以 Redis 协议的格式来保存,新命令会被追加到文件的末尾。 Redis 还可以在后台对 AOF 文件进行重写(rewrite),使得 AOF 文件的体积不会超出保存数据集状态所需的实际大小。Redis 还可以同时使用 AOF 持久化和 RDB 持久化。 在这种情况下, 当

2016-11-22 17:42:36 1657

转载 redis源码阅读(7)-数据持久化RDB,AOF

Redis 持久化:提供了多种不同级别的持久化方式:一种是RDB,另一种是AOF.RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot)。AOF 持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集。 AOF 文件中的命令全部以 Redis 协议的格式来保存,新命令会被追加到文件的末尾。 Redis 还可以在后台

2016-11-22 14:20:51 529

原创 redis源码阅读(6)-timeEvent之异步处理客户端

clientCron函数针对client的操作主要由以下几点: (1)如果客户端没有在阻塞调用状态,比如说BLPOP操作等,如果客户端上次请求server的时间与server端现在时间差超过server.maxidletime,直接关闭客户端,删除和此客户端相关的任何数据,表示此客户端已经被异常关闭,或者长时间没有进行操作。 (2)如果客户端处在阻塞请求状态,并且阻塞请求的超时时间已到,回复客户

2016-11-21 22:51:09 643

原创 redis源码阅读(5)-timeEvent事件之过期key回收

redis的事件主要由两种fileEvent 也就是各种socked的异步操作,通过epoll网络模型监听。另外一种就是timeEvent事件,redis就有一个timeEvent事件,可以理解为定时器。注册timeEvent事件时,事件函数是int serverCron(struct aeEventLoop *eventLoop, long long id, void *clientData) ,

2016-11-21 21:58:28 1455

原创 redis源码阅读(4)-timeEvnet之rehash重哈希过程

当redis数据库中HashTable数据达到触发条件时,会触发哈希表的重构的操作。触发条件可以设置:1、Resize缩小哈希表触发条件是:元素数量/槽的数量小于REDIS_HT_MINFILL时,触发dictResize操作int htNeedsResize(dict *dict) { long long size, used; size = dictSlots(dict);

2016-11-21 20:48:00 1457

原创 redis源码阅读(4)-回复客户端请求

上一小节,分析了client的请求,这一小节主要看处理具体的命令的详细过程: 客户端指令解析完之后,需要执行该指令,执行指令的两个函数为processCommand与call函数,这两个函数除了单纯的执行指令外,还做了许多其他的工作,processCommand中调用了call函数,只分析call函数,其他的工作有点繁琐,等等仔细看完再写另起炉灶。 call函数中调用了具体的执行函数例如:sel

2016-11-18 21:18:20 1157

转载 python 正则表达式

正则表达式的元字符有. ^ $ * ? { [ ] | ( ) .表示任意字符 []用来匹配一个指定的字符类别,所谓的字符类别就是你想匹配的一个字符集,对于字符集中的字符可以理解成或的关系。 ^ 如果放在字符串的开头,则表示取非的意思。[^5]表示除了5之外的其他字符。而如果^不在字符串的开头,则表示它本身。具有重复功能的元字符: * 对于前一个字符重复0到无穷次 对于前一个字符重复1到无

2016-11-08 20:46:42 402

原创 Mysql 存储过程

1、存储过程的权限ALTER ROUTINE 编辑或删除存储过程CREATE ROUTINE 创建存储过程EXECUTE运行存储过程2、存储过程的创建语法delimiter // -- 声明分隔符(命令结束符)create definer = user@hostname | current_user procedure 存储过程名 (参数) comment '注释' sq

2016-10-14 10:53:00 476

原创 python 中的map,imap,startmap

先来看看map 其定义为map(function,iterable1,iterable2, ……….) 针对iterable中的每个元素执行function函数,返回function执行结果的一个list列表,如果iterable不止一个,那么并行的选取每个iterable中元素,作为function的参数,然后执行function,下面看看列子:a=[1,2,3]fun1=lambda a:

2016-09-20 16:37:23 7613

原创 关于Python中的yield

在介绍yield前有必要先说明下Python中的迭代器(iterator)和生成器(constructor)。 一、迭代器(iterator) 在Python中,for循环可以用于Python中的任何类型,包括列表、元祖等等,实际上,for循环可用于任何“可迭代对象”,这其实就是迭代器迭代器是一个实现了迭代器协议的对象,Python中的迭代器协议就是有next方法的对象会前进到下一结果,而在一系

2016-09-19 21:31:19 486

翻译 python下使用epoll

因为最近想学习如何用epoll写服务器, 于是找到了一篇介绍的文章. 因为我最近一直看不进技术文章, 于是打算通过翻译来强迫自己学习. 原文在这里: http://scotdoyle.com/python-epoll-howto.html文章里面的代码下载地址: http://scotdoyle.com/python-epoll-examples.tar.gz介绍 从2.6版本开始,

2016-09-13 15:55:36 7712

原创 同步,阻塞

说到阻塞,首先得说说I/O等待。I/O等待是不可避免的,那么既然有了等待,就会有阻塞,但是注意,我们说的阻塞是指当前发起I/O操作的进程被阻塞 同步阻塞I/O便是指,当进程调用某些涉及I/O操作的系统调用或库函数时,比如accept()(注意accept也算在了i/o操作)、send()、recv()等,进程便暂停下来,等待I/O操作完成再继续运行。这是一种简单而有 效的I/O模型,它可以和多进

2016-09-12 19:26:41 454

原创 协程到底是个啥

作者:陈果果果果果栋 链接:http://www.zhihu.com/question/32218874/answer/55469714 来源:知乎 著作权归作者所有,转载请联系作者获得授权。协程是啥 首先我们得知道协程是啥?协程其实可以认为是比线程更小的执行单元。为啥说他是一个执行单元,因为他自带CPU上下文。这样只要在合适的时机,我们可以把一个协程 切换到 另一个协程。只要这个过程中保存

2016-09-12 16:18:23 7113 1

转载 Python中的property() 函数 和@property 装饰符

http://www.linuxidc.com/Linux/2011-10/45082.htm 大家也许知道C#中提供了属性Property这个概念,让我们在对私有成员赋值、获取时更加方便,而不用像C++分别定义set*和get*两个函数,在使用时也就像直接使用变量一样。 今天突然发现Python中竟然也提供了如此类似的方法,感到甚为亲切,发上来大家一起讨论一下,有不妥的地方还请多多指教。 假

2016-08-25 11:25:56 530

原创 Hive UDF开发

Hive UDF开发 Hive进行UDF开发十分简单,此处所说UDF为Temporary的function,所以需要hive版本在0.4.0以上才可以。Hive的UDF开发只需要重构UDF类的evaluate函数即可。例:package com.ghl.hive.udf;import org.apache.hadoop.hive.ql.exec.UDF;public class helloUDF

2016-08-23 19:09:20 613

转载 Hive 分区,静态分区,动态分区

一直对hive 的分区有点模糊,看到一篇具体一点的文章,转载过来。http://f.dataguru.cn/thread-526681-1-1.html1  导入作业数据集total.csv到Hive中,用日期做为分区表的分区ID。要求有描述型文字,Hive脚本和截图。回购表数据:tradedate:交易日期tradetime:交易时间

2016-08-23 15:37:53 547

转载 IO - 同步,异步,阻塞,非阻塞 (亡羊补牢篇)

自己一直对 同步,异步,阻塞,非阻塞模棱两可。对推荐这篇文章,有助于自己的理解!

2016-08-22 19:49:17 509

转载 python 多线程中的同步锁 Lock Rlock Semaphore Event Condition

在使用多线程的应用下,如何保证线程安全,以及线程之间的同步,或者访问共享变量等问题是十分棘手的问题,也是使用多线程下面临的问题,如果处理不好,会带来较严重的后果,使用python多线程中提供Lock Rlock Semaphore Event Condition 用来保证线程之间的同步,后者保证访问共享变量的互斥问题Lock & RLock:互斥锁 用来保证多线程访问共享变量的问题 Semapho

2016-08-21 02:14:08 4680 1

原创 MYsql IN谓词优化

最近在完成小任务时,遇到多表联查的问题,更改某个数据表中符合过滤条件的商品的分类字段:cat_paths数据表结构简化如下数据表1,product:product_id   product_name      cat_paths123                 '补差价'                 '58.70'数据表2,

2016-08-20 00:08:55 622

原创 linux开机出现一下错误Give root password for maintenance (or type Control-D to continue):

第一种错误的情况:由于错误的编辑/etc/fstab文件 而引起的不能正常进入系统。假如你将某一个分区或者磁盘最后一个参数设置为1或2时,系统默认会在开机过程中检查这个磁盘的扇区。假如系统检查不到这个磁盘,或者这个磁盘根本检测不到(尤其是在网络存储时)那么系统就会报错,导致出现这种情况。解决办法:输入root密码,此时整个文件系统是只读系统,不能进行修改文件,首先利用下面的命令将文件系统改为可写的文

2016-08-19 23:52:53 27423 1

原创 Linux内存管理(下)

虽然应用程序操作的对象是映射到物理内存之上的虚拟内存,但是处理器直接操作的却是物理内存。所以当用程序访问一个虚拟地址时,首先必须将虚拟地址转化成物理地址,然后处理器才能解析地址访问请求。地址的转换工作需要通过查询页表才能完成,概括的讲,地址转换需要将虚拟地址分段,使每段虚地址都作为一个索引指向页表,而页表项则指向下一级别的页表或者指向最终的物理页面。每个进程都有自己的页表。进程描述符号的pgd域指向

2016-08-19 23:51:18 372

原创 Linux内存管理(上)

摘要 本章首先以应用程序开发者的角度审视Linux的进程内存管理,在此基础上逐步深入到内核中讨论系统物理内存管理和内核内存地使用方法。力求从外自内、水到渠成地引导网友分析Linux地内存管理与使用。在本章最后我们给出一个内存映射地实例,帮助网友们理解内核内存管理与用户内存管理之间地关系,希望大家最终能驾驭Linux内存管理。 详见:http://www.cnblogs.com/h

2016-08-19 23:50:02 433

原创 gcc编译中常用参数: -I dir -L dir -w -Wall -On

1、-I dir 在头文件的搜索路径中添加目录dir目录。在include语句中“<>”表示在默认路径“/usr/include”和/usr/local/include中搜索头文件,引号“”表示在本目录下搜索。如果在即编写头文件,如果头文件位置与当前.c文件不在同一个目录,则就需要利用-I 头文件所在目录即可。2、-L dir gcc到系统默认的路径“/usr/lib”下查找库文件。头文件包含声明,

2016-08-19 23:45:23 2661

原创 calloc(), malloc(), realloc(), free() 异同点

void *calloc(size_t nobj, size_t size); 分配足够的内存给nobj个大小为size的对象组成的数组, 并返回指向所分配区域的第一个字节的指针; 若内存不够,则返回NULL. 该空间的初始化大小为0字节.char p = (char ) calloc(100, sizeof(char));void *malloc(size_t size); 分配足够的内存给

2016-08-19 23:37:45 290

转载 Linux多线程中使用信号

在Linux的多线程中使用信号机制,与在进程中使用信号机制有着根本的区别,可以说是完全不同。在进程环境中,对信号的处理是,先注册信号处理函数,当信号异步发生时,调用处理函数来处理信号。它完全是异步的(我们完全不知到信号会在进程的那个执行点到来!)。然而信号处理函数的实现,有着许多的限制;比如有一些函数不能在信号处理函数中调用;再比如一些函数read、recv等调用时会被异步的信号给中断(inter

2016-08-19 23:35:46 411

转载 CPU亲和性(affinity)及与亲和性有关的两个函数 sched_setaffinity()和 sched_getaffinity()

转自: http://www.ibm.com/developerworks/cn/linux/l-affinity.html简单地说,CPU 亲和性(affinity) 就是进程要在某个给定的 CPU 上尽量长时间地运行而不被迁移到其他处理器的倾向性。Linux 内核进程调度器天生就具有被称为 软 CPU 亲和性(affinity) 的特性,这意味着进程通常不会在处理器之间频繁迁移。这种状态正是我们

2016-08-19 23:29:08 719

转载 linux内核线程、轻量级进程、用户进程

linux内核线程、轻量级进程、用户进程

2016-08-19 23:19:20 526

转载 Python中中文乱码问题

为什么Python使用过程中会出现各式各样的乱码问题,明明是中文字符却显示成“\xe4\xb8\xad\xe6\x96\x87”的形式?为什么会报错“UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)”?本文就来研究一下这个问题。字符

2016-08-19 23:14:22 458

转载 用python解析html[SGMLParser]

文章转载自:http://pnig0s1992.blog.51cto.com/393390/412049/因为要用python做学校网络的认证程序,需要解析服务器传回的html,本以为会像javascript里操作DOM那样简单,结果发现并不是 这样,被搞了一下。其实python里面有xml.dom模块,但是这次却不能用,为啥呢?因为服务器传回的html从xml角度看不是良构的,没

2016-08-19 23:03:43 641

转载 Python 之ConfigParser

一、ConfigParser简介ConfigParser 是用来读取配置文件的包。配置文件的格式如下:中括号“[ ]”内包含的为section。section 下面为类似于key-value 的配置内容。1: [db]2: db_host = 127.0.0.13: db_port = 224: db_user = root5:

2016-08-19 22:57:51 276

转载 Python的内存管理

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢!语言的内存管理是语言设计的一个重要方面。它是决定语言性能的重要因素。无论是C语言的手工管理,还是Java的垃圾回收,都成为语言最重要的特征。这里以Python语言为例子,说明一门动态类型的、面向对象的语言的内存管理方式。**对象的内存使用**赋值语句是语言最常见的功能了。但即使是最简单

2016-08-18 15:37:49 401

原创 python中set去重注意事项

python中set结构是 唯一的可被哈希的(hashable)对象(object)的无序的集合。也就是说set内的元素必须是可被哈希的。有时候我们需要使用set结构来检测两个列表或其它的数据类型的元素差异。如下:m1=[1,2,3]m2=[2,3,4]m=set(m1)-set(m2)print(m)输出结果为:set([1])上面的代码 使用m1和m2初始化两个set对象,然

2016-08-15 12:35:20 4276 3

原创 lce的回调实现(Bidirectional Connections)双向通信

1、需求使用ice 进行client和server之间的通信,请求(request)往往是单向的,即client请求server。然而这种情况有时候不能满足我们的项目设计需求,需要server向客户端进行回调。这种情况下server端通常向client建立一个新的链接。如下图所示:不幸运的是,有时候收到网络限制,客户端与服务端之间间隔这防火墙,防火墙阻止服务端向客户端主动建立连接,如下图:

2016-08-12 18:13:31 2889

原创 python 命名元组(namedtuple)

我们知道c/c++语言中,有结构体这种数据类型:struct{ string name; int age; char sex; }student;在对结构体对象进行赋值或者取值时可以使用.运算符进行操作。那么问题来,python中有没有这个数据类型呢?答案是肯定有的,它就是命名元组(namedtyple)。首先来看一下python中普通元组的

2016-08-11 15:54:44 10001 1

空空如也

空空如也

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

TA关注的人

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