摘要:1.说明基于System V内核的实现可能不支持多个进程在同一个监听描述符上调用accept。需要在accept前后放置某种形式的锁。这里采用fcntl的文件上锁功能,属于记录锁的一种。在性能上慢于下节要讲的互斥锁。2.代码#include "unp.h"#include #include ...
阅读全文
摘要:1.说明Posix文件上锁可移植到所有Posix兼容系统,但是涉及到文件系统操作,可能比较费时。本次使用线程上锁保护accept,这不仅适用于同一进程中各线程之间上锁,也适用于不同进程之间上锁。2.进程间使用互斥锁要求(1) 互斥锁变量必须存放在由所有进程共享的内存区。(2) 必须告知线程函数库这是...
阅读全文
摘要:的环境配置首先在网上下载UNP的库文件,然后就可以安装学了。我的系统环境:2.6.32-131.0.15.el6.i686 #1 SMP Sat Nov 12 17:30:50 CST 2011 i686 i686 i386 GNU/LinuxLSB Version: :base-4.0-ia32...
阅读全文
摘要:TCP并发服务器(五)——每个客户一个线程1.说明前面4个版本都是关于进程的,可以将进程改为线程来实现。这个最简单的版本也快于前面的所有预先派生进程的版本。2.代码#include "unpthread.h"void sig_int(int signo){ DPRINTF("sig_int()...
阅读全文
摘要:TCP并发服务器(二)——预创建子进程,accept不上锁1.说明这是预创建进程中速度最快的。适用于源自BSD的内核,但是accept是一个库函数的System V可能不允许这么做(因此需要accept上锁保护)。2.优缺点无需引入父进程执行fork的开销就能处理新的客户。缺点时必须在启动阶段猜测需...
阅读全文
摘要:TCP并发服务器(一)——每个客户一个子进程1.说明这是最传统的并发服务器,对于每一个客户请求fork一个子进程。问题在于每次fork一个子进程比较耗费时间,下面会讲预创建进程。程序代码基于UNP的库。程序在使用进程的模式下是最慢的。2.代码#include "unp.h"int main(int ...
阅读全文
摘要:TCP并发服务器(六)——创建线程池,每个线程accept,accept使用互斥锁保护——基于UNP代码1.说明预创建一个线程池,线程池中各个线程accept。主线程不做什么。这是Leader/Follower领导者/跟随者模式2.代码代码基于UNP的库函数我们没有让线程阻塞于accept, 而是选...
阅读全文
摘要:TCP并发服务器(七)——可动态增减的线程池,主线程accept——基于UNP代码修改1.说明线程池基于一个区间动态变化,在客户连接过多线程不够用时,动态增加一定数量的线程。在线程闲置数量多于一半时,动态减小线程数量到一个基准线。这个例子模式为:半同步/半异步(half-sync/half-asyn...
阅读全文
摘要:STL源码之vector1. SGI的vectorSGI stl vector继承子一个基类:template > class vector : protected _Vector_base在基类中定义了基本的一些操作,并且封装了了vector所需要的基本的三个指针:struct _Vector_...
阅读全文
摘要:STL函数对象和Lambda表达式1.基本概念Function object是定义了operator()的object。FunctionObjectType fo;fo(…);调用函数对象的operator()代替函数fo()的调用。等价于:fo.operator()(…);函数对象的三个好处:(1...
阅读全文
摘要:STL算法之排序算法STL排序算法通常复杂度坏于线性,且必须要random-access Iterators。所以,forward_list, list, associative and unordered contains 不提供随机访问迭代器,这些容器不能用排序算法。但是,forward_lis...
阅读全文
摘要:1. Copying ElementsOutputItercopy(InputIter sourceBeg, InputIter sourceEnd, OutputIter destBeg);OutputItercopy_if(InputIter sourceBeg, InputIter sourc...
阅读全文