上一页 1 2 3 4 5 6 7 8 9 10 ··· 26 下一页
摘要: 线程池服务模型是single thread 与 request per thread两种模型的折中方案,其在实现时通常需要借助任务队列,主线程往任务队列尾添加任务,线程池中的服务线程不断从任务队列头取任务并服务,如下图所示: 对于主线程和服务线程来说,任务队列是临界资源,需要加锁进行保护。主线程往任务队列添加任务时需要加锁,服务线程从任务队列取任务也许加锁,当服务线程发现任... 阅读全文
posted @ 2013-04-19 14:12 ydzhang 阅读(160) 评论(0) 推荐(0)
摘要: 网络服务器的实现不外乎两种情况,一是为某个业务单端开发服务器,二是实现通用网络服务器框架,前者的设计可能很大程度的受业务需求的影响,而后者则要保证简单易用,稳定服务,最好还有不错的性能。 服务器框架的优势在于让使用者快速的进行开发,只需要做很少的事情即可完成服务器的开发。在整个服务模型中,只有对请求任务的处理是预先不可知的,其他的逻辑基本上是固定的,故在实现框架时,将实际的处理部分以回调的形... 阅读全文
posted @ 2013-04-19 14:12 ydzhang 阅读(164) 评论(0) 推荐(0)
摘要: 多线程在网络编程中作用重大,由于创建/销毁线程、线程间通信的开销小,目前很多网络服务器都是用多线程(线程池)的模式对外提供服务。linux上开发多线程程序多使用pthread库,本文主要讨论使用C++封装pthread库时可能出现的问题。 封装pthread库主要有两种思路,第一种是简单的封装接口,如下所示: class simple_thread_t { public: int star... 阅读全文
posted @ 2013-04-19 14:12 ydzhang 阅读(194) 评论(0) 推荐(0)
摘要: 循环read(write) 在网络应用程序中,通常需要重复的调用read/write来读取到指定数量的数据,如下例: int wrapper_read(int fd, char *buf, int size) { int ridx = 0; int rlen = 0; while(ridx < size) { rlen = read(fd, buf + ridx, size – ri... 阅读全文
posted @ 2013-04-19 14:12 ydzhang 阅读(278) 评论(0) 推荐(0)
摘要: 关于hash函数 hash函数主要用于将“大范围”映射到“小范围”,如MD5将任意长度的数据计算出128bit的签名值,RSHash等函数将任意长度的数据转换成32bit的无符号整型,好的hash函数拥有高性能以及低hash冲突。 hash函数主要通过加减乘除及移位等操作来计算最终结果,hash函数的分类参考: http://nicoleamanda.blog.163.com/blog/... 阅读全文
posted @ 2013-04-19 14:12 ydzhang 阅读(271) 评论(0) 推荐(0)
摘要: 关于listen的backup参数 listen的第二个参数,在网上有各种版本的解释,有人说是三次握手成功等待被accept的请求队列长度,有人说是尚未成功建立连接的队列长度,有人说是二者队列长度之和。 #man listen # man tcp 从man手册可以发现:从linux 2.2开始,backlog是指已经建立连接等待被accept的队列长度,而未成功建立连接的队列长度由tc... 阅读全文
posted @ 2013-04-19 14:12 ydzhang 阅读(202) 评论(0) 推荐(0)
摘要: linux提供了select、poll、epoll接口来实现IO复用,三者的原型如下所示,本文从参数、实现、性能等方面对三者进行对比。 int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); int poll(struct pollfd *fds,... 阅读全文
posted @ 2013-04-19 14:12 ydzhang 阅读(173) 评论(0) 推荐(0)
摘要: TCBDB是tokyo cabinet的一部分,实现了基于B+树的key/value存储,本文简单介绍TCBDB中分支及叶子节点的存储结构。 分支节点(非叶子节点)的结构 typedef struct { // type of structure for a page index uint64_t pid; // ID number of the referring page ... 阅读全文
posted @ 2013-04-19 14:12 ydzhang 阅读(431) 评论(0) 推荐(0)
摘要: 典型情况:三个副本构成一个group 1.强一致性:所有的副本更新成功才返回。 如上图C表示Client,【P、S1、S2】构成一个同步组,P表示Primary node,S1,S2是两个secondary node,强同步模型的工作流程为C向P写数据,P向S1,S2转发,只有3个都写成功,才向C返回成功,否则写失败。这种模型对于append操作很容易实现,如果副本没有... 阅读全文
posted @ 2013-04-19 14:12 ydzhang 阅读(889) 评论(0) 推荐(0)
摘要: step1 安装xampp(包含apache、mysql、php、perl等组件,并提供统一的管理) step2 打开xampp control panel,启动apache服务(如果不能成功启动,查看http:80端口以及https:443端口是否被占用,如果被占用则关闭对应的服务)。 step3 ... 阅读全文
posted @ 2013-04-19 14:12 ydzhang 阅读(244) 评论(0) 推荐(0)
上一页 1 2 3 4 5 6 7 8 9 10 ··· 26 下一页