摘要: 在上一节中已经分析了memcached的内存分配管理初始化机制,在这节中我们将详细分析memcached中slab的管理与分配机制。slabclass[MAX_NUMBER_OF_SLAB_CLASSES]数组是slab管理器(类型见上节),是memcached内存管理的核心数据结构,起着非常重要的作用。slabclass[i]的内存示意图如下图所示:(1) size和perslab保存着每个slab分配的chunk的大小,及可分配的chunk数。(2) slablist是一个二维指针,指向一个指针列表,列表的长度为list_size * sizeof(void*),列表中的一项指向一个sla 阅读全文
posted @ 2012-05-16 16:14 Moon_Bird 阅读(1125) 评论(0) 推荐(1)
摘要: 一 内存分配管理机制 memcached是一个高性能的,分布式内存对象缓存系统,用于在动态系统中减少数据库负载,提升性能。memcached有一个很有特色的内存管理方式,为了提高效率,默认情况下采用了名为Slab Allocator的机制分配管理内存空间。 memcached文档中关于slab allocator有这么一段话: the primary goal of the slabs subsystem in memcached was to eliminate memory fragmentation issues totally by using fixed-size memory ch 阅读全文
posted @ 2012-05-14 14:48 Moon_Bird 阅读(3794) 评论(0) 推荐(1)
摘要: 高性能的网络服务器需要同时并发处理大量的客户端,而采用以前的那种对每个连接使用一个分开的线程或进程方法效率不高,因为处理大量客户端的时候,资源的使用及进程上下文的切换将会影响服务器的性能。一个可替代的方法是在一个单一的线程中使用非阻塞的I/O(non-blocking I/O)。 这篇文章主要介绍linux下的epoll(7)方法,其有着良好的就绪事件通知机制。我们将会使用C来展现一个完整的TCP服务器实现代码。Epoll是被linux2.6开始引进的,但是不被其他的类UNIX系统支持,它提供了一种类似select或poll函数的机制:1.Select(2)只能够同时管理FD_SETSIZE. 阅读全文
posted @ 2012-03-17 21:42 Moon_Bird 阅读(28163) 评论(2) 推荐(1)
摘要: 译自:http://accu.org/var/uploads/journals/overload101.pdf 在多线程应用程序中,要求消息输入队列和消息输出队列顺序要求保持一致,而忽略多线程并发处理的顺序,这种情况是比较难处理的。在本文中,作者设计了一种新型解决方案:PRQueue(预留位置队列),较很好的解决这个问题。 PRQueue是使用c++的两个STL的deque还有pthread线程库实现的,并且在例子中使用了两个简单的类-Mutex和Lock来展示这个逻辑。StringMsg类表现一个样本消息,QueueTest类用来测试。 我选择STL的deque是因为deque拥有很多必要的 阅读全文
posted @ 2012-03-12 13:58 Moon_Bird 阅读(705) 评论(0) 推荐(0)
摘要: 译自:http://accu.org/var/uploads/journals/overload104.pdf 这篇文章提供了一种C++模板解决方案来确保在多线程程序中同步访问变量。当我们使用c++编写多线程程序的时候,我们一般会采用如下的模型:#include <mutex> using namespace std; class Person { public: string GetName() const { unique_lock<mutex> lock(mutex); return mutex; } void SetName(const string& 阅读全文
posted @ 2012-03-06 14:39 Moon_Bird 阅读(1473) 评论(0) 推荐(0)
摘要: 一 什么是CGI CGI(The Common Gateway Interface):通用网关接口,定义web服务器和客户脚本进行信息交互的一系列标准。二 web浏览器 为了了解CGI的概念,让我们来看看当我们单击一个超链接来浏览一个特定的web页或URL的时候,背后会发生什么事? (1)浏览器首先会链接HTTP web 服务器并且请求一个URL 页面; (2) WEB服务器将会解析这个URL并且查询请求的文件名,如果找到了请求文件服务器就会将这个文件发送回浏览器,否则发送回一个包含错误信息提示的页面指示你请求的是一个服务器并不包含的文件。(3)WEB浏览器将接受来自服务器端的响应,并且向发出 阅读全文
posted @ 2012-02-22 10:50 Moon_Bird 阅读(18142) 评论(4) 推荐(4)
摘要: 转载自:http://www.cnblogs.com/fll/archive/2008/05/17/1201540.html如今的web服务器需要同时处理一万个以上的客户端了,难道不是吗?毕竟如今的网络是个big place了。现在的计算机也很强大了,你只需要花大概$1200就可以买一个1000MHz的处理器,2G的内存, 1000Mbit/sec的网卡的机器。让我们来看看--20000个客户,每个为50KHz,100Kbyes和 50Kbit/sec,那么没有什么比为这两万个客户端的每个每秒从硬盘读取4千字节然后发送到网络上 去更消耗资源的了。可以看出硬件不再是瓶颈了。 (That work 阅读全文
posted @ 2012-02-12 22:44 Moon_Bird 阅读(279) 评论(0) 推荐(0)
摘要: 一 VIM打开文件操作:sp file1 分屏打开文件:vsp file1 水平分屏打开文件:e file1 在当前窗口中打开文件使用ctrl + w + 方向键进行切换打开ftp服务器上的文件::e ftp://192.168.10.76/abc.txt保存(如果不存在则创建)::w ftp://192.168.10.76/abc.txt读取::r ftp://192.168.10.76/abc.txt以上操作第一次打开时需要输入用户名和密码,以后就不用了,vim 会记住的。(注意:vim 本身并不携带 ftp 客户端,vim 只是调用操作系统提供的 ftp 客户端并捕获它的输出)。二 vi 阅读全文
posted @ 2012-01-06 16:16 Moon_Bird 阅读(318) 评论(0) 推荐(0)
摘要: 一 C FAQ 英文版地址:http://c-faq.com/中文版翻译下载地址:http://c-faq-chn.sourceforge.net/Object-oriented Programming with ANSI-C:http://www.planetpdf.com/codecuts/pdfs/ooc.pdf二 C++ FAQ英文版:http://www.parashift.com/c++-faq-lite/index.html中文版:http://www.sunistudio.com/cppfaq/index.html英文版Bjarne Stroustrup's C++ S 阅读全文
posted @ 2012-01-04 09:58 Moon_Bird 阅读(201) 评论(0) 推荐(0)
摘要: 贴一下我的.vimrc,部分带注释set syntax=onset tabstop=4set nobackupset cindent "有时中文会显示乱码,用一下几条命令解决 let &termencoding=&encoding set fileencodings=utf-8,gbk"默认缩进4个空格大小 set shiftwidth=4 "去掉边框set go= "设置配色,这里选择的是desert,也有其他方案,在vim中输入:color 在敲tab键可以查看 color desert "设置背景色,每种配色有两种方案,一 阅读全文
posted @ 2011-12-23 11:00 Moon_Bird 阅读(161) 评论(0) 推荐(0)