03 2014 档案

摘要:Erlang实现的网络服务器性能是非常高的,一个典型的服务器比如proxy我们可以处理40万个包的进出,链接数在万级别的。当然这么高的网络 能力和底层的epoll实现有很大关系。那么通常我们的gen_tcp收到内核协议栈过来完整的封包的时候,有三种方式可以通知到我们,参见 inet:setopts文档{active, true | false | once}If the value is true, which is the default, everything received from the socket will be sent as messages to the receivin 阅读全文
posted @ 2014-03-23 00:03 风华一指流砂,苍老一段年华 阅读(318) 评论(0) 推荐(0)
摘要:1 uniform() -> 2 {A1, A2, A3} = case get(random_seed) of 3 undefined -> seed0(); 4 Tuple -> Tuple 5 end, 6 B1 = (A1*171) rem 30269, 7 B2 = (A2*172) rem 30307, 8 B3 = (A3*170) rem 30323, 9 put(random_seed, {B1,B2,B3}),10 R = A1/30269 +... 阅读全文
posted @ 2014-03-22 17:29 风华一指流砂,苍老一段年华 阅读(944) 评论(0) 推荐(0)
摘要:1 // graph.cpp : 定义控制台应用程序的入口点。 2 //邻接矩阵表示 3 #include "stdafx.h" 4 #include 5 #define INFINITY 32767 6 #define MAX_VEX 20 7 #define QUEUE_SIZE 20 8 bool *visited; //用来判断是否遍历过,为true则遍历过,为false,则未遍历过 9 10 typedef struct{ 11 cha... 阅读全文
posted @ 2014-03-16 16:54 风华一指流砂,苍老一段年华 阅读(352) 评论(0) 推荐(0)
摘要:Composite组合模式作用:将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性。UML图如下:在Component中声明所有用来管理子对象的方法,其中包括Add、Remove等,这样实现Component接口的所有子类都具备了Add和Remove。这样做的好处就是叶节点和枝节点对于外界没有区别,它们具备 完全一致的行为 接口。但问题也很明显,因为Leaf类本身不具备Add()、Remove()方法的 功能,所以实现它是没有意义的。何时使用组合模式:当你发现需求中是体现部分与整体层次的结构时,以及你希望用户可以忽略组合对象与单个 阅读全文
posted @ 2014-03-15 21:05 风华一指流砂,苍老一段年华 阅读(203) 评论(0) 推荐(0)
摘要:装饰模式,动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。Decorator提供了一种给类增加职责的方法,不是通过继承实现的,而是通过组合。(优先使用组合而非继承)13.1.解释main(),老爸ISchoolReport,成绩单接口CFourthGradeSchoolReport,四年级成绩单ReportDecorator,成绩单装饰器基类HighScoreDecorator,最高分装饰器SortDecorator,班级排名装饰器说明:对“四年级成绩单”进行装饰,ReportDecorator必然有一个private变量指向ISchoolRep 阅读全文
posted @ 2014-03-15 14:10 风华一指流砂,苍老一段年华 阅读(219) 评论(0) 推荐(0)
摘要:适配器模式,使用之处比较特殊,不属于常规设计模式,主要用于不同系统之间的处理。是将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。也是一个比较简单的模式,直接上代码了。看代码:8.1.解释main(),主程序IUserInfo,本系统内接口CUserInfo,本系统内实现类IOuterUser,外系统接口COuterUser,外系统实现类COuterUserInfo,本系统内适配类说明:COuterUserInfo实现IUserInfo接口,将外部系统实现类COuterUser转换成本系统内的接口IUserInfo。使用外部 阅读全文
posted @ 2014-03-15 12:02 风华一指流砂,苍老一段年华 阅读(199) 评论(0) 推荐(0)
摘要:桥梁模式,将抽象部分与它的实现部分分离,使它们都可以独立地变化。实现分离的办法就是增加一个类,11.1.解释main(),客户IProduct,产品接口CHouse,房子CIPod,ipodCClothes,服装CNewCorp,桥梁类,MakeMoney()是桥梁方法CNewHouseCorp,只能生产房子,所以构造函数是CHouse*CShanZhaiCorp,什么赚钱就生产什么,所以构造函数是IProduct*说明:客户直接使用CNewHouseCorp和CShanZhaiCorp类,在main()函数里构造产品,然后传到这两个类里。这两个类的MakeMoney()函数,先调用基类的Ma 阅读全文
posted @ 2014-03-12 17:54 风华一指流砂,苍老一段年华 阅读(263) 评论(0) 推荐(0)
摘要:建造者模式,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。一段晦涩难懂的文字,实现创建不同表示的方法就是给创建的过程传入创建的参数。详细的还是看代码吧。10.1.解释main(),客户CCarModel,产品模型CBenzModel,奔驰模型CBMWModel,宝马模型ICarBuilder,建造者接口CBenzBuilder,奔驰建造者CBMWBuilder,宝马建造者CDirector,导演说明:CCarModel实现模板方法,Builder负责开始建造产品。建造产品时,构建的顺序由Director或main决定。注意:建造者模式和抽象工厂非常类似。建造者更重视 阅读全文
posted @ 2014-03-12 12:48 风华一指流砂,苍老一段年华 阅读(193) 评论(0) 推荐(0)
摘要:创建型: Builder: 当我们要创建的对象很复杂的时候(通常是由很多其他的对象组合而成),我们要将复杂对象的创建过程和这个对象的表示(展示)分离开来,这样做的好处就是通过一步一步的进行复杂对象的构建,由于在每一步的构造过程中可以引入参数,使得同样的构建过程可以创建不同的表示。 AbstractFactory:产品类:假设有A、B、C 三种"等级"的怪物类,而每种等级的怪物类下面又有着相同的怪物“种类”类(e.g. 男 or 女),工厂类:我们的工厂类是具体的“种类”工厂(e.g. 男 or 女),这个工厂类里面有相应的函数可以调用对应的“种类”的对应等级的函数(e.g. 阅读全文
posted @ 2014-03-12 01:27 风华一指流砂,苍老一段年华 阅读(135) 评论(0) 推荐(0)
摘要:抽象工厂,提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。对于工厂方法来说,抽象工厂可实现一系列产品的生产,抽象工厂更注重产品的组合。看代码:7.1.解释main(),女娲IHuman,产品接口CYellowHuman,抽象产品之一CYellowFemaleHuman,具体产品之一CYellowMaleHuman,具体产品之二CWhiteHuman,抽象产品之二CWhiteFemaleHuman,具体产品之三CWhiteMaleHuman,具体产品之四CBlackHuman,抽象产品之三CBlackFemaleHuman,具体产品之五CBlackMaleHuman,具体产品 阅读全文
posted @ 2014-03-12 01:11 风华一指流砂,苍老一段年华 阅读(224) 评论(0) 推荐(0)
摘要:(1)删除进程字典中x键的值 erlang:put(x,undefined). 就是把值改为undefined就Ok.(2)ets:match 匹配记录的时候,_='_' 可以代表任意多的键值对,匹配非记录的时候 '_' 只能代表一个term.(3)类似 lists:map/lists:foreac... 阅读全文
posted @ 2014-03-08 21:01 风华一指流砂,苍老一段年华 阅读(255) 评论(0) 推荐(0)
摘要:各种基本算法实现小结(三)—— 树与二叉树(均已测试通过)===================================================================二叉树——先序测试环境:VS 2010 1 #include 2 #include 3 #include 4 struct _node 5 { 6 char data; 7 struct _node *lchild; 8 struct _node *rchild; 9 };... 阅读全文
posted @ 2014-03-08 18:20 风华一指流砂,苍老一段年华 阅读(342) 评论(0) 推荐(0)
摘要:各种基本算法实现小结(二)—— 堆 栈(均已测试通过)==============================================================栈——数组实现测试环境:VS 2010 1 #include 2 char stack[512]; 3 int top=0; 4 void push(char c) 5 { 6 stack[top]=c; 7 top++; 8 } 9 char pop() 10 { 11 ... 阅读全文
posted @ 2014-03-07 19:16 风华一指流砂,苍老一段年华 阅读(265) 评论(0) 推荐(0)
摘要:各种基本算法实现小结(一)—— 单链表(均已测试通过)单链表(测试通过) 测试环境:VS 2010 1 #include 2 struct _node 3 { 4 int data; 5 struct _node *next; 6 }; 7 typedef struct _node list; 8 void display(list *l) 9 { 10 list *p; 11 p=l; 12 while(p->next... 阅读全文
posted @ 2014-03-07 11:37 风华一指流砂,苍老一段年华 阅读(206) 评论(0) 推荐(0)
摘要:sudo yum install erlang emacs首先要安装erlang,其次要安装emacs。我们以emacs作为erlang代码的编辑器。其可以提供很好的语法高亮,智能缩进,智能填充等功能。首先在home目录下配置.emacs文件(如果没有需要创建),使其支持erlang mode假设您的erlang的安装目录为/usr/lib/erlang,注意配置中涉及的目录,需要与您的安装环境相匹配。;; setup erlang mode;; add the location of the elisp files to the load-path(setq load-path (cons 阅读全文
posted @ 2014-03-06 14:08 风华一指流砂,苍老一段年华 阅读(330) 评论(0) 推荐(0)
摘要:我们通常在使用port的时候, 需要把他同其他的上下文关联起来, 以便在port给我们发生数据的时候, 我们能根据绑定的上下文, 知道如何处理数据.有2种办法:1. 用ets来保存{Port, Ctx},这个比较慢, 每次都要查表.2. 用Port本身的空间来保存Ctx. erlang:port_set_data 和erlang:port_get_data就是干这类事情的, 一步到位, 多核free.不啰嗦上代码:root@ubuntu:~# echo test >> test.datroot@ubuntu:~# erlErlang R14A (erts-5.8) 1 [smp:2 阅读全文
posted @ 2014-03-05 20:30 风华一指流砂,苍老一段年华 阅读(260) 评论(0) 推荐(0)
摘要:单例模式看起来也蛮简单的,就是在系统中只允许产生这个类的一个实例,既然这么简单,就直接贴代码了。更详细的内容及说明可以参考原作者博客:cbf4life.cnblogs.com。3.1.解释main(),大臣CEmperor,需要单例的类说明:很多大臣拜见的皇帝,只有一个。体现在面向对象方面,CEmperor定义一个静态指针,和一个静态函数,私有化构造函数、析构函数、构造函数复制、重载赋值语句。注意:线程安全,采用互斥体的方式实现。看代码://Emperor.h#pragma once#include using std::cout;using std::endl;using std::stri 阅读全文
posted @ 2014-03-05 20:22 风华一指流砂,苍老一段年华 阅读(279) 评论(0) 推荐(0)
摘要:对于三层的概念查也查了,看也看了,下面是我找的一个关于三层的简单实例,真正看一下它是如何具体实现的.我们先来一起看看实体类-Model实质:实体类就是在完成数据库与实体类对应的功能,一个类是一张表,一个属性是一个字段![csharp] using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace model { public class User { public User() { } priva... 阅读全文
posted @ 2014-03-05 13:46 风华一指流砂,苍老一段年华 阅读(230) 评论(0) 推荐(0)
摘要:工厂方法模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。 核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系 统在不修改具体工厂角色的情况下引进新的产品。这个例子更详细的内容及说明可以参考原作者博客:cbf4life.cnblogs.com。贴代码了。5.1.解释main(),女娲IHuman,产品接口CYellowHuman,产品之一CWhiteHuman,产品之二CBlackHuman,产品之三IHumanFactory,工厂接口CYellowHumanFactory,工 阅读全文
posted @ 2014-03-04 15:04 风华一指流砂,苍老一段年华 阅读(193) 评论(0) 推荐(0)
摘要:Erlang有个类似Makefile的文件Emakefile负责编译erl程序,说明文档在此格式是Erlang代码 {Modules, Options}. 其中Modules是一个atom,或者是一个atom的列表。这些atom可以是一个模块名,如file1;可以是别的目录中的模块名,如../foo/file3;也可以是通过通配符匹配的一系列模块名,如file*;还可以是上述atom的列表,如['file*', '../foo/file3', 'File4']。Options是compiler命令的配置参数,具体参数可以查看文档一个Emakefi 阅读全文
posted @ 2014-03-04 14:50 风华一指流砂,苍老一段年华 阅读(217) 评论(0) 推荐(0)
摘要:io:format的格式化参数。 c 输出多个重复的字符。 1.io:format(”~2c”,”a”). 结果:aa,标识输出字母2次。 2.io:format(”~2.1c”,”a”). 结果:_a,标识输出2个字符,1个是后面跟的字母,另一个位置用空格补充,从左开始,如果是”~-2.1c”是从右侧开始。 s 打印字符串,按手册说只接受list,atom,2进制的结构。 w,p是标准输出,支持term,区别是p会对输出的数据做一些分行处理,w会显示在一行。 io_lib:format("~2.10.0B",[2]) 结果[["0","2&q 阅读全文
posted @ 2014-03-04 14:46 风华一指流砂,苍老一段年华 阅读(835) 评论(0) 推荐(0)
摘要:稍微深入研究过一点 java 的同学,恐怕都知道什么叫做 “反编译” 。也就是说,随便拿一个 class 文件,找一个 jad 来,所有的 “智慧结晶” 就全都 “真相大白” 了,跟原先的 source code 相比,区别只是没有注释而已。对于开源软件开发者来说,这本是无所谓的事,但对于商业开发者而言,这简直就是噩梦。在 java 的世界,道高一尺魔高一丈(及其反复迭代)的结果是,这件事最终演变得比较诡异,以至于专门诞生了一个名叫 “代码混淆” 的产业。在我上一次关注的时候,这个领域的最新进展是可以 “混淆” 程序执行的流程,以至于正常的人类阅读反编译出来的源码,将会导致严重的脑残。不过,传 阅读全文
posted @ 2014-03-04 14:33 风华一指流砂,苍老一段年华 阅读(356) 评论(0) 推荐(0)
摘要:一、概述Layer-3 音频文件,MPEG(Moving Picture Experts Group) 在汉语中译为活动图像专家组,特指活动影音压缩标准,MPEG音频文件是MPEG1 标准中的声音部分,也叫MPEG 音频层,它根据压缩质量和编码复杂程度划分为三层,即Layer-1、Layer2、Layer3,且分别对应MP1、MP2、MP3 这三种声音文件,并根据不同的用途,使用不同层次的编码。MPEG 音频编码的层次越高,编码器越复杂,压缩率也越高,MP1 和MP2 的压缩率分别为4:1 和6:1-8:1,而MP3 的压缩率则高达10:1-12:1,也就是说,一分钟CD 音质的音乐,未经压缩 阅读全文
posted @ 2014-03-04 14:26 风华一指流砂,苍老一段年华 阅读(1381) 评论(0) 推荐(0)
摘要:学习何时以及如何使用 POSIX AIO APILinux® 中最常用的输入/输出(I/O)模型是同步 I/O。在这个模型中,当请求发出之后,应用程序就会阻塞,直到请求满足为止。这是很好的一种解决方案,因为调用应用程序在等待 I/O 请求完成时不需要使用任何中央处理单元(CPU)。但是在某些情况中,I/O 请求可能需要与其他进程产生交叠。可移植操作系统接口(POSIX)异步 I/O(AIO)应用程序接口(API)就提供了这种功能。在本文中,我们将对这个 API 概要进行介绍,并来了解一下如何使用它。AIO 简介Linux 异步 I/O 是 Linux 内核中提供的一个相当新的增强。它 阅读全文
posted @ 2014-03-04 14:00 风华一指流砂,苍老一段年华 阅读(148) 评论(0) 推荐(0)
摘要:Vmware 8.0终于出来了,不但支持Windows 8还能支持Mac OS X 10.7(Lion),真是强大无比啊!下面就介绍一下VMware 8完美安装Mac Lion正式版教程。1、下载Vmware Workstation 8.0正式版、下载Mac OS X 安装包、下载Mac引导工具、系统驱动。下载:Vmware Workstation 8.0正式版下载:下载Mac OS X 安装包下载:本文用到的其他工具打包2、设置虚拟机。3、安装Mac OS X 10.7(Lion),装驱动,因此就完美告成!创建虚拟机,这里基本下一步就可以,难度不大。选对虚拟机型号FreeBSD X 64,设 阅读全文
posted @ 2014-03-04 13:52 风华一指流砂,苍老一段年华 阅读(1595) 评论(0) 推荐(0)
摘要:(1) 指针的大小永远都是4字节,因为保存的是地址。(2)堆:它的物理内存空间是由程序申请的,并由程序负责释放。 栈:它是由操作系统分配的,内存的申请与回收都由OS管理(先进后出)。(3) char i[10]={'a','b','c','d','e','f','g','h','i'}; cout<<i<<endl; //输出 abcdefghi 如果i是数值型的话,这里输出的是相应数值变量的首地址 cout<<&a 阅读全文
posted @ 2014-03-02 13:07 风华一指流砂,苍老一段年华 阅读(131) 评论(0) 推荐(0)
摘要:字节对齐有其中一条规则是这样说的:结构体的总大小为结构体最宽(最大)基本类型成员大小的整数倍,如有需要编译器会在最末一个成员之后加上填充字节。(所以在vs下,sizeof查看大小的时候默认对齐大小是取最宽的数据类型的大小)原因:CPU的访问粒度不仅仅是大小限制,地址上也有限制。也就是说,CPU只能访问对齐地址上的固定长度的数据。以四字节对齐为例,就是只能访问0x0-0x3,0x4-0x7,0x8-0xc这样的(闭)区间,不能跨区间访问。如果真正需要访问的数据并没有占据那个区间的全部字节范围,还有另外的信号线来指出具体操作哪几个字节,类似于掩码的作用。好像也有些架构干脆就不允许这种部分访问,强制 阅读全文
posted @ 2014-03-02 12:59 风华一指流砂,苍老一段年华 阅读(167) 评论(0) 推荐(0)
摘要:在传统服务器结构中, 常是有一个总的监听线程监听有没有新的用户连接服务器, 每当有一个新的用户进入,服务器就开启一个新的线程用户处理这个用户的数据包。这个线程只服务于这个用户 , 当用户与服务器端关闭连接以后,服务器端销毁这个线程。然而频繁地开辟与销毁线程极大地占用了系统的资源。而且在大量用户的情况下,系统为了开辟和销毁线程将浪费大量的时间和资源。线程池提供了一个解决外部大量用户与服务器有限资源的矛盾,线程池和传统的一个用户对应一个线程的处理方法不同, 它的基本思想就是在程序开始时就在内存中开辟一些线程, 线程的数目是固定的,他们独自形成一个类, 屏蔽了对外的操作, 而服务器只需要将数据包交给 阅读全文
posted @ 2014-03-01 17:57 风华一指流砂,苍老一段年华 阅读(548) 评论(0) 推荐(0)
摘要:先来一个实例:首先要说明的是,若用户没有定义,C++隐式声明一个复制构造函数和一个赋值运算符(完成按数据成员复制的动作)。二者很像,但是在下边这点上有很大的不 同:复制构造函数是只在对象实例化时才会被调用,也就是说,在复制构造函数调用期间,这个对象处于一个未决状态(直到复制构造函数被成功调用),另外复制 构造函数不返回任何值,void都没有。而赋值运算符则在一个现存的对象被赋予新的值时被调用,并且它有返回值。在下边这个例子中我们能看到并不是出现“=”就是调用赋值构造函数:#include using namespace std; class Test{ public: ... 阅读全文
posted @ 2014-03-01 13:04 风华一指流砂,苍老一段年华 阅读(346) 评论(0) 推荐(0)
摘要:Erlang中节点之间建立链接我们可以使用net_adm:ping(),连接成功返回pong,失败返回pang;实践中我们不仅仅是要建立连接,比如我们需要在与其它节点建立连接或者其它节点断开的时候做一些事情,比如在节点当掉的时候记录日志,这就需要在对应的时机取得相应的信息;Erlang在net_kernel库中提供了这样的方法:net_kernel:monitor_nodes(Flag);调用这个方法来订阅节点状态变动的消息.一个节点加入的时候会向所有的订阅进程发送一个nodeup消息,一个节点断开的时候会发送nodedown消息. 看规格说明中,我们可以对订阅的消息进行定制: doc地址:. 阅读全文
posted @ 2014-03-01 10:41 风华一指流砂,苍老一段年华 阅读(299) 评论(0) 推荐(0)
摘要:Author:Serge Aleynikov Tranlator:David Overview:该文的读者需要熟悉gen_server和gen_fsm行为,使用gen_tcp模块进行TCP socket通信,主动和被动的socket模式,以及OTP监视原理。OTP为构建可靠的应用提供了一个方便的框架。该框架的实现,部分是通过抽象共同的功能到一个可服用的行为集合里面,例如链接到OTP监视层的gen_server和gen_fsm。有几个比较著名的TCP服务器设计。这里我们要讨论的包括,一个进程监听一个客户端连接并且为每个连接的客户端产生一个FSM进程。如今在OTP里 面可以通过gen_tcp模块来 阅读全文
posted @ 2014-03-01 10:34 风华一指流砂,苍老一段年华 阅读(548) 评论(0) 推荐(0)
摘要:声明:本文章是对erlang手册的部分内容的中文翻译,版权归原作者所有……由于本人的英语水平有限(翻译此手册的目的之一就是提高英语水平^0^),所以翻译有误乃正常现象,如有发现请及时提醒,THX……谨以此文献给初学erlang并且不喜欢看英文手册的朋友……ets模块ets模块摘要 内置的数据条目存贮描述该模块是erlang内置数据条目存贮BIF的接口.它具备在erlang运行系统中存贮大量数据的能力,并且访问数据的时间是常量级的。(在ordered_set中,访问数据的时间与数据量的对数成正比).数据被组织成可以存贮元组的动态表。每个表在进程中创建,当进程退出时,表自动销毁。表在创建时可以设置 阅读全文
posted @ 2014-03-01 10:20 风华一指流砂,苍老一段年华 阅读(1144) 评论(0) 推荐(0)
摘要:pg2这个模块实现了进程组的功能。这个模块之前有个模块为pg,pg模块的进行组中消息将被发送到组内的每个进程,但是pg2却不同,它可以选择性地将 消息发送给单个、某些或全部组内成员。通过进程组的名称可以访问组内的进程,例如进程组的名称为foobar,而且有一系列进程位于组内,可能这些进程位 于不同的节点上,都可以成为foobar的成员。不能够直接向foobar发送消息,但是通过方法get_members/1 和 get_local_members/1获取的组内的进程,然后可以与查出的进程通信。下面是一些示例:%%通常pg2服务器不需要明确显示的启动的,而是在需要的时候动态的启动,%%例如你调用 阅读全文
posted @ 2014-03-01 10:18 风华一指流砂,苍老一段年华 阅读(406) 评论(0) 推荐(0)
摘要:前言这是翻译erlang官方文档中的 erts-5.9.2的erl_nif部分。翻译完了。水平有限,我就把这个当作是我自己使用了,以后也会继续完善的。erlang nif 中文手册 概括 功能 初始化 数据类型 接口-资源分配类 接口-线程操作类 接口-类型操作类概括NIF库包含了erlang模块的一些方法的原生实现。这些NIF方法的调用方式跟其他普通方法的调用一样,但是每个NIF函数都要用erlang对应的实现,如果NIF库成功载入,在调用NIF函数之前,会先调用对应的erlang实现的函数。一个典型的用法是:根实现方法用作抛出异常。有时候当果系统没... 阅读全文
posted @ 2014-03-01 10:16 风华一指流砂,苍老一段年华 阅读(1447) 评论(0) 推荐(0)
摘要:背景Linux 平台上的多线程程序开发相对应其他平台(比如 Windows)的多线程 API 有一些细微和隐晦的差别。不注意这些 Linux 上的一些开发陷阱,常常会导致程序问题不穷,死锁不断。本文中我们从 5 个方面总结出 Linux 多线程编程上的问题,并分别引出相关改善的开发经验,用以避免这些的陷阱。我们希望这些经验可以帮助读者们能更好更快的熟悉 Linux 平台的多线程编程。我们假设读者都已经很熟悉 Linux 平台上基本的线程编程的 Pthread 库 API 。其他的第三方用以线程编程的库,如 boost,将不会在本文中提及。本文中主要涉及的题材包括线程开发中的线程管理,互斥变量, 阅读全文
posted @ 2014-03-01 10:13 风华一指流砂,苍老一段年华 阅读(204) 评论(0) 推荐(0)
摘要:IO模型在Richard Stevens的《UNIX网络编程,第一卷》(程序猿必备!)一书中有非常详尽的描述,以下简要介绍,并给出代码示例。另外比较好的总结性blog,推荐:使用异步 I/O 大大提高应用程序的性能IO - 同步,异步,阻塞,非阻塞 (亡羊补牢篇)常见网络IO模型:阻塞式IO、无阻塞式IO、IO复用、异步IO、信号驱动阻塞式IO:在一个进程发出IO请求后,进入阻塞状态,直到内核返回数据,才重新运行,如图:代码sever端: #include #include #include #include #include ... 阅读全文
posted @ 2014-03-01 09:50 风华一指流砂,苍老一段年华 阅读(281) 评论(0) 推荐(0)