摘要: 在上一篇中已分析了memcached线程池的创建流程,由于上篇篇幅较长,因此将memcached线程池中线程的调度流程另立一篇。先让我们把目光转到主函数中,主线程在调用thread_init函数创建好线程池后,就开始创建监听套接字,memcached支持TCP,UDP,UNIX域套接字,因此相应的要创建三种监听套接字这里我们只分析TCP listening socket的创建(UDP与TCP的创建采用统一的接口),函数入口为:1 errno = 0;2 if (settings.port && server_sockets(settings.port, tcp_transp.. 阅读全文
posted @ 2012-07-10 18:54 Moon_Bird 阅读(3586) 评论(0) 推荐(1) 编辑
摘要: 已经个把月没有写长篇博文了,最近抽了点时间,将memcached源码分析系列文章的线程机制篇给整出来,在分析源码的过程中参考了网上的一些资源。该文主要集中于两个问题:(1)memcached线程池是如何创建的,(2)线程池中的线程又是如何进行调度的。一切从源码中找答案。memcached的线程池模型采用较典型的Master-Worker模型:(1)主线程负责监听客户端的建立连接请求,以及accept 连接,将连接好的套接字放入连接队列;(2)调度workers空闲线程来负责处理已经建立好的连接的读写等事件。1 关键数据抽象(1)memcached单个线程结构的封装 1 //memcached线 阅读全文
posted @ 2012-07-10 16:26 Moon_Bird 阅读(8481) 评论(0) 推荐(1) 编辑
摘要: GNU提供了许多有用的工具来理解和处理目标文件:1 AR:创建静态库,插入、删除、列出和提取成员2 STRINGS:列出一个目标文件中所有可打印的字符串3 STRIP:从目标文件中删除符号表信息4 NM:列出一个目标文件中符号表中定义的符号5 SIZE:列出目标文件中节的名字和大小6 READELF:显示一个目标文件的完整结构,包含nm和size的功能7 OBJDUMP:所有二进制工具之母8 LDD:列出一个可执行文件在运行时所需要的共享库监控和操作进程的有用工具:1 STRACE:打印一个正在运行的程序和它的子进程调用的每个系统调用的轨迹2 PS:列出当前系统中的进程3 TOP:打印出当前进 阅读全文
posted @ 2012-07-06 21:44 Moon_Bird 阅读(403) 评论(0) 推荐(0) 编辑
摘要: #include <stdio.h>int array[] = {12,3,4,5,6};#define LEN (sizeof(array)/sizeof(array[0]))int main(){ int d = -1; if (d <= LEN ) printf("HEHE"); else printf("HAHA"); return 0;}代码输出为"HAHA"。原因:LEN的返回值为unsigned int型,if语句在signed int 与unsigned int之间测试相等性,则signed int提 阅读全文
posted @ 2012-06-05 23:52 Moon_Bird 阅读(607) 评论(0) 推荐(1) 编辑
摘要: import sysimport BaseHTTPServerfrom SimpleHTTPServer import SimpleHTTPRequestHandlerHandlerClass = SimpleHTTPRequestHandlerServerClass = BaseHTTPServer.HTTPServerProtocol = "HTTP/1.0"if sys.argv[1:]: port = int(sys.argv[1])else: port = 8000server_address = ('127.0.0.1', port)Handle 阅读全文
posted @ 2012-06-05 20:35 Moon_Bird 阅读(831) 评论(0) 推荐(0) 编辑
摘要: 转载自:http://www.linuxsir.org/main/?q=node/129#1 作者:北南南北一、什么是多重操作系统引导管理器,什么是GRUB;1、什么是多重操作系统引导管理器及工作原理;系统启动引导管理器,是在计算机启动后运行的第一个程序,他是用来负责加载、传输控制到操作系统的内核,一旦把内核挂载,系统引导管理器的任务就算完成退出,系统引导的其它部份,比如系统的初始化及启动过程则完全由内核来控制完成;Briefly, boot loader is the first software program that runs when a computer starts. It is 阅读全文
posted @ 2012-06-05 20:11 Moon_Bird 阅读(1532) 评论(0) 推荐(0) 编辑
摘要: 1 实现批量ping代码python实现:1 import os2 for i in range(1,6):3 ret=os.system('ping -c 1 -W 1 192.168.100.%d &> /dev/null' % i)4 if not ret:5 print 'ping 192.168.100.%d ok' % i#!/usr/bin/env python#coding:utf-8import osv=('192.168.100.%d' % (x) for x in range(1,6))for it in v: 阅读全文
posted @ 2012-05-24 23:55 Moon_Bird 阅读(333) 评论(0) 推荐(0) 编辑
摘要: 1 c++中的c子集部分与标准c的不同之处:(1)c中32位机器上char c = 'a'; sizeof(c) = 1;sizeof('a') = 4;而在c++中sizeof('a') = 1;原因:C99标准的规定,'a'为整型字符常量(integer character constant),被看成是int型,所以在32位机器上占4字节。C++标准规定,'a'为字符字面量(character literal),被看成是char型,所以占1字节(2)void*指针赋值给另外一个类型的指针时,c++规定必须进行强 阅读全文
posted @ 2012-05-24 23:45 Moon_Bird 阅读(521) 评论(0) 推荐(0) 编辑
摘要: 在memcached内存存储机制剖析的前两篇文章中,已分析过memcached的内存管理器初始化机制及slab的管理分配机制。接下来我们就来探讨下对象item的分配管理及LRU机制。1 item关键数据结构(1)item结构体原型typedef struct _stritem { struct _stritem *next; struct _stritem *prev; struct _stritem *h_next; /* hash chain next */ rel_time_t time; /* least recent access ... 阅读全文
posted @ 2012-05-21 16:09 Moon_Bird 阅读(3240) 评论(2) 推荐(4) 编辑
摘要: 此文资料来自CU的一篇精华帖,将static的知识总结的比较全面到位,故整理来与大家分享。通常理解static只是指静态存储的概念,事实上在c++里面static包含了两方面的含义。1)在固定地址上的分配,这意味着对象是在一个特殊的静态区域上创建的,而不是每次函数调用的时候在堆栈上动态创建的,这是static的静态存储的概念。2) 另一方面,static能够控制对象对于连接器的可见性。一个static对象,对于特定的编译单元来说总是本地范围的,这个范围包括本地文件或者本地的某一个类,超过这个范围的文件或者类是不可以看到static对象的,这同时也描述了连接的概念,它决定连接器能够看到哪些名字。 阅读全文
posted @ 2012-05-21 10:32 Moon_Bird 阅读(2524) 评论(0) 推荐(4) 编辑