- 博客(102)
- 资源 (2)
- 收藏
- 关注
转载 C++深度探索系列:智能指针(Smart Pointer)
一、剖析C++标准库智能指针(std::auto_ptr) 1.Do you Smart Pointer? 2.std::auto_ptr的设计原理 3.std::auto_ptr高级使用指南 4.你是否觉得std::auto_ptr还不够完美?二、C++条件,寻找构造更强大的智能指针(Smart Pointer)的 策略 1.支持引用记数的
2009-05-06 10:31:00 768
转载 ICE线程池模型 — L/F领导者跟随者模式
<br />ICE线程池模型 — L/F领导者跟随者模式 <br />摘自:Leo 阿材<br />网址:http://blog.csdn.net/ecjtuync/archive/2009/06/15/4270314.aspx<br />程池模式一般分为两种:L/F领导者与跟随者模式、HS/HA半同步/半异步模式。<br />HS/HA 半同步/ 半异步模式 : <br />分为三层,同步层、队列层、异步层,又称为生产者消费者模式,主线程处理I/O事件并解析然后再往队列丢数据,然后消费者读出数据进行应用逻
2010-09-16 09:25:00 1512
原创 Linux对I/O端口资源的管理(ZZ)
几乎每一种外设都是通过读写设备上的寄存器来进行的。外设寄存器也称为“I/O端口”,通常包括:控制寄存器、状态寄存器和数据寄存器三大类,而且一个外设的寄存器通常被连续地编址。CPU对外设IO端口物理地址的编址方式有两种:一种是I/O映射方式(I/O-mapped),另一种是内存映射方式(Memory-mapped)。而具体采用哪一种则取决于CPU的体系结构。 有些体系结构的CPU(如,Po
2010-04-01 15:25:00 1081
转载 中断处理的tasklet(小任务)机制和workqueue(工作队列)机制
一、中断处理的tasklet(小任务)机制中断服务程序一般都是在中断请求关闭的条件下执行的,以避免嵌套而使中断控制复杂化。但是,中断是一个随机事件,它随时会到来,如果关中断的时间太长,CPU就不能及时响应其他的中断请求,从而造成中断的丢失。因此,Linux内核的目标就是尽可能快的处理完中断请求,尽其所能把更多的处理向后推迟。例如,假设一个数据块已经达到了网线,当中断控制器接受到这个中断请求信号
2010-03-26 10:31:00 10322 3
原创 Linux 2.6内核的设备模型
Linux 2.6内核的设备模型Linux 2.6内核的一个重要特色是提供了统一的内核设备模型。随着技术的不断进步,系统的拓扑结构越来越复杂,对智能电源管理、热插拔以及plug and play的支持要求也越来越高,2.4内核已经难以满足这些需求。为适应这种形势的需要,2.6内核开发了全新的设备模型。 1. Sysfs文件系统Sysfs文件系统是一个类似于proc文件系统的特殊文件系统,
2010-03-22 11:04:00 1083
转载 多线程服务器的适用场合
陈硕 (giantchen_AT_gmail) Blog.csdn.net/Solstice 2010 Feb 28这篇文章原本是前一篇博客《多线程服务器的常用编程模型》(以下简称《常用模型》)计划中的一节,今天终于写完了。“服务器开发”包罗万象,本文所指的“服务器开发”的含义请见《常用模型》一文,一句话形容是:跑在多核机器上的 Linux 用户态的没有用户界面的长期运行的网络应用
2010-03-10 16:19:00 999
转载 多线程服务器的常用编程模型
多线程服务器的常用编程模型 陈硕 (giantchen_AT_gmail)Blog.csdn.net/Solstice2009 Feb 12 建议阅读本文 PDF 版下载: http://files.cppblog.com/Solstice/multithreaded_server.pdf 本文主要讲我个人在多线程开发方面的一些粗浅经验。总结了一两种常用的线程
2010-03-10 16:15:00 1186
转载 《多线程服务器的适用场合》例释与答疑
陈硕 (giantchen_AT_gmail) Blog.csdn.net/Solstice 2010 March 3 - rev 01《多线程服务器的适用场合》(以下简称《适用场合》)一文在博客登出之后,有热心读者提出质疑,我自己也觉得原文没有把道理说通说透,这篇文章试图用一些实例来解答读者的疑问。我本来打算修改原文,但是考虑到已经读过的读者不一定会注意到文章的变动,干脆另写一篇。为
2010-03-10 16:11:00 844
原创 软件开发人员常用的网站
http://www.gotapi.com/ 语言:英语 简介:HTML,CSS,XPATH,XSL,JAVASCRIPT等API的查询网站。http://www.w3schools.com/ 语言:英语 简介:W3C制定的标准诸如XML,HTML,XSL等等的在线学习教程。http://www.xml.org.cn/ 语言:中文 简介:可以说是XML的中国官方网吧。W3C标准的翻译组织与XML系
2010-03-10 16:09:00 870
转载 当析构函数遇到多线程──C++ 中线程安全的对象回调
请尽量阅读本文 PDF 版:http://www.cppblog.com/Files/Solstice/dtor_meets_mt.pdf 豆丁亦可,内容略微滞后: http://www.docin.com/p-42460300.html这里是从 word 直接粘贴过来,脚注链接都丢失了。 摘要编写线程安全的类不是难事,用同步原语保护内部状态即可。但是对象的生与死不能由对象自身
2010-03-10 15:30:00 1072
转载 以boost::function和boost:bind取代虚函数
这是一篇比较情绪化的blog,中心思想是“继承就像一条贼船,上去就下不来了”,而借助boost::function和boost::bind,大多数情况下,你都不用上贼船。boost::function和boost::bind已经纳入了std::tr1,这或许是C++0x最值得期待的功能,它将彻底改变C++库的设计方式,以及应用程序的编写方式。Scott Meyers的Effective C
2010-03-10 14:22:00 907
原创 线程同步-信号量-strand的用法总结
这里展示不用boost::asio::strand而是利用常规线程同步的手段来完成线程的同步。 #include #include #include #include #include #include class printer{public: printer(boost::asio::io_service& io): timer
2010-03-10 13:52:00 2675 1
转载 boost::ASIO的异步方式
嗯?异步方式好像有点坐不住了,那就请异步方式上场,大家欢迎...大家好,我是异步方式和同步方式不同,我从来不花时间去等那些龟速的IO操作,我只是向系统说一声要做什么,然后就可以做其它事去了。如果系统完成了操作, 系统就会通过我之前给它的回调对象来通知我。在ASIO库中,异步方式的函数或方法名称前面都有“async_” 前缀,函数参数里会要求放一个回调函数(或仿函数)。异步操作
2010-03-10 13:50:00 22816 4
原创 boost::asio 的同步方式
Boost.Asio是一个跨平台的网络及底层IO的C++编程库,它使用现代C++手法实现了统一的异步调用模型。头文件#include 名空间using namespace boost::asio;ASIO库能够使用TCP、UDP、ICMP、串口来发送/接收数据,下面先介绍TCP协议的读写操作对于读写方式,ASIO支持同步和异步两种方式,首先登场的是同步方式,下面请同步方式自
2010-03-10 13:23:00 6700 1
转载 高性能I/O设计模式Reactor和Proactor
文章主要是讲到了系统I/O方式可分为阻塞,非阻塞同步和非阻塞异步三类,三种方式中,非阻塞异步模式的扩展性和性能最好。主要是讲了两种IO多路复用模式:Reactor和Proactor,并对它们进行了比较。文章还介绍了为Reactor和Proactor模式构建一个通用的,统一的对外接口并是一个完全可移植的开发框架选择方案:TProactor (ACE compatible Proactor
2010-03-10 13:20:00 1653
转载 异步IO、APC、IO完成端口、线程池与高性能服务器之四 线程池
线程池下面摘抄于MSDN《Thread Pooling》。有 许多应用程序创建的线程花费了大量时间在睡眠状态来等待事件的发生。还有一些线程进入睡眠状态后定期被唤醒以轮询工作方式来改变或者更新状态信息。线程池可以让你更有效地使用线程,它为你的应用程序提供一个由系统管理的工作者线程池。至少会有一个线程来监听放到线程池的所有等待操作,当等待操作完成后,线 程池中将会有一个工作者线程来执行相应的回调函数。
2010-03-10 13:18:00 974
转载 异步IO、APC、IO完成端口、线程池与高性能服务器之五 服务器的性能指标与实现高性能的途径
服务器的性能指标 作为一个网络服务器程序,性能永远是第一位的指标。性能可以这样定义:在给定的硬件条件和时间里,能够处理的任务量。能够最大限度地利用硬件性能的服务器设计才是良好的设计。 设计良好的服务器还应该考虑平均服务,对于每一个客户端,服务器应该给予每个客户端平均的服务,不能让某一个客户端长时间得不到服务而发生“饥饿”的状况。 可伸缩性,也就是说,随着硬件能力的提高,服务器的性
2010-03-10 13:18:00 997
转载 异步IO、APC、IO完成端口、线程池与高性能服务器之三 IO完成端口
IO完成端口下面摘抄于MSDN《I/O Completion Ports》,smallfool翻译,原文请参考CSDN文档中心文章《I/O Completion Ports》, http://dev.csdn.net/Develop/article/29%5C29240.shtm 。I/O 完成端口是一种机制,通过这个机制,应用程序在启动时会首先创建一个线程池,然后该应用程序使用线程池处理异步I/
2010-03-10 13:16:00 838
转载 异步IO、APC、IO完成端口、线程池与高性能服务器之二 APC
Alertable IO(告警IO)提供了更有效的异步通知形式。ReadFileEx / WriteFileEx在发出IO请求的同时,提供一个回调函数(APC过程),当IO请求完成后,一旦线程进入可告警状态,回调函数将会执行。 以下五个函数能够使线程进入告警状态: SleepEx WaitForSingleObjectEx WaitForMultipleObjects
2010-03-10 13:15:00 936
转载 异步IO、APC、IO完成端口、线程池与高性能服务器之一 异步IO
背景:轮询 PIO DMA 中断 早期IO设备的速度与CPU相比,还不是太悬殊。CPU定时轮询一遍IO设备,看看有无处理要求,有则加以处理,完成后返回继续工作。至今,软盘驱动器还保留着这种轮询工作方式。 随着CPU性能的迅速提高,这种效率低下的工作方式浪费了大量的CPU时间。因此,中断工作方式开始成为普遍采用的技术。这种技术使得IO设备在需要得到服务时,能够产生一个硬件中断,迫使CP
2010-03-10 10:51:00 891
转载 完成端口与高性能服务器程序开发
早在两年前我就已经能很熟练的运用完成端口这种技术了,只是一直没有机会将它用在什么项目中,这段时间见到这种技术被过分炒作,过分的神秘化,就想写一篇解释它如何工作的文章.想告诉大家它没有传说中的那么高深难懂!有什么错误的地方还请高人指正.转载请注明出处及作者,谢谢!以一个文件传输服务端为例,在我的机器上它只起两个线程就可以为很多个个客户端同时提供文件下载服务,程序的性能会随机器内CPU个数的增加而
2010-03-10 10:42:00 1048
原创 理解I/O Complete Port
说明:这篇简要的说了IOCP,说清楚了IOCP的骨架。=================================================================================== 欢迎阅读此篇IOCP教程。我将先给出IOCP的定义然后给出它的实现方法,最后剖析一个Echo程序来为您拨开IOCP的谜云,除去你心中对IOCP的烦恼。OK,但我不能保证
2010-03-10 10:22:00 2289
转载 Boost下载安装编译配置使用指南(含Windows和Linux)
理论上,本文适用于boost的各个版本,尤其是最新版本1.39.0;适用于各种C++编译器,如VC6.0(部分库不支持),VS2003,VS2005,VS2008,gcc,C++ Builder等。先总结一下Windows系统。一、下载首先从boost官方主页http://www.boost.org/下载最新版boost安装包(目前最新版是1.39.0)。因为boost一部分类是需要编译成库才能使
2010-03-05 15:57:00 4926 1
原创 Boost源码剖析之:型别分类器——type_traits
动机1. 分派下面有一个模板函数,假设一个动物收容组织提供了它,他们接受所有无家可归的可怜的小动物,于是他们向外界提供了一个函数接受注册。函数看起来像这样:template //T表示接受的是何种动物void AcceptAnimals(T animal){ ... //do something};但是,如果他
2010-02-25 11:44:00 1007
转载 走进boost
一直流传这么一个说法,想成为高手,一定要多读高手写的源代码。哪些代码是好材料呢?C++标准库的源代码?不,如果您读过,就会发现:要么是各种实现独有的表达方式让人摸不着头脑,要么是恐怖的代码风格(如到处是下划线)憋得人难受。Boost库的代码则相当清晰,注释合理,命名规范,绝对是适合阅读的典范。同时,Boost内容广泛,数值计算、泛型编程、元编程、平台API……不妨从容选择自己感
2010-02-25 10:49:00 2021
原创 模板与泛型编程
一、了解隐式接口和编程器多态 1. template及泛型编程的世界,与面向对象的根本不同点。class 和 templates 都支持接口和多态。面向对象:显示接口和运行期多态,以函数签名为中心。template:隐式接口和编译器多态,奠基于有效表达式。 二、了解typename的双重意义 提问:以下template声明中,class和typename有何不同
2010-02-24 13:22:00 662
转载 模板特化,全特化,偏特化,全部特化,部分特化
这几个名词真是把人搞混了(是因为有的著作,甚至名著以讹传讹),我最近整理了以下,看看大家的意见如何。模板特化:任何针对模板参数进一步进行条件限制设计的特化版本。《泛型思维》全特化就是全部特化,即针对所有的模板参数进行特化。《c++ primer》偏特化就是部分特化,即针对部分模板参数进行特化。《c++ primer》全特化和偏特化的定义不是很严格,所以有的时候不容易让人理解。举例如
2010-02-24 09:18:00 1072
原创 C++接口的设计和声明
任何接口设计的一个准则:让接口容易被正确使用,不容易被误用。 理想上:如何客户企图使用某个接口缺没有获得他所预期的行为,这个代码不该通过编译;如果代码通过了编译,他的行为就该是客户所想要的。 1. 导入外覆类型(wrapper types)2. 让types容易被正确使用,不容易被误用。尽量领你的types行为与内置types一致。 3. 设计class犹如设计type
2010-02-23 10:52:00 3926
原创 C++学习心得
1.把C++当成一门新的语言学习(和C没啥关系!真的。); 2.看《Thinking In C++》,不要看《C++变成死相》; 3.看《The C++ Programming Language》和《Inside The C++ Object Model》,不要因为他们很难而我们自己是初学者所以就不看; 4.不要被VC、BCB、BC、MC、TC等词汇所迷惑——他们都是集成开发环境,而我们要学的是一
2010-02-23 09:30:00 740
原创 资源管理
C++中常见的资源就是动态内存分配,常见的还有文件描述符、互斥锁、图形界面的字形和笔刷、数据库连接、以及网络sockets。不论哪一种资源,当你不再使用它时,必须将它还给系统。 一、以对象管理资源 1. 获得资源后立刻放进资源管理对象内。 2. 管理对象运用析构函数确保资源被释放。(if 资源释放时导致抛出异常,又该如何呢?) 标
2010-02-23 09:16:00 630
原创 C常用代码
一、批量转移字符到缓冲区bufptr = buffer;void bufwrite(char* p,int n){ while(n>0) { int k,rem; if(bufptr == &buffer[N]) flushbuffer(); rem = N - (bufp
2010-01-28 20:57:00 636
原创 分配并注册主次设备号
分配并注册主次设备号 设备号是在驱动module中分配并注册的,也就是说,驱动module拥有这个设备号(我的理解),而/dev目录下的设备文件是根据这个设备号创建的,因此,当访问/dev目录下的设备文件时,驱动module就知道,自己该出场服务了(当然是由内核通知)。 在Linux内核看来,主设备号标识设备对应的驱动程序,告诉Linux内核使用哪一个驱动程序为该设备(也就是/dev下
2010-01-15 14:53:00 2967
原创 Linux系统下驱动程序框架概述
一、linux的设备驱动程序与外界的接口可以分为三个部分: 1.驱动程序与操作系统内核的接口。通过file_operations(include/linux/fs.h)数据结构来完成的。 2.驱动程序与系统引导的接口。这部分利用驱动程序对设备进行初始化。 3.驱动程序与设备的接口。这部分描述了驱动程序如何与设备进行交互,与具体的设备密切相关。 二、根据功能划分,设备驱动程序的代码有
2010-01-15 14:39:00 883
转载 ACE与ASIO之间关于Socket编程的比较
ACE与ASIO之间关于Socket编程的比较转自:FREE MY SOULACE是一个很成熟的中间件产品,为自适应通讯环境,但它过于宏大,一堆的设计模式,架构是一层又一层,对初学者来说,有点困难。ASIO是基本Boost开发的异步IO库,封装了Socket,简化基于socket程序的开发。最近分析ASIO的源代码,让我无不惊呀于它设计。在ACE中开发中的内存管理一直让人头痛,ASIO
2010-01-05 16:33:00 801
原创 软件架构设计分享
架构师不仅要熟悉技术,业务和管理,更重要的是要有自己的思想,架构设计在我看来,他不是技术,而是一种艺术。我喜欢艺术,我热爱架构,以前在自己的学习道路上总是渺茫,似乎现在找到了方向。 软件结构的分类:互联网软件架构、企业应用软件架构、嵌入式软件架构、有线或无线网络架构、安全架构。 软件架构的学习视频和文档: /Files/Jack2007/jackwa
2010-01-05 16:09:00 903
原创 Linux常用头文件
Linux常用的头文件集合: 目录项 文件控制 文件名匹配类型 路径名模式匹配类型 组文件 网络数据库操作 口令文件 正则表达式 TAR归档值 终端I/O 符号常量 文件时间 字符扩展类型————————- INT
2009-12-30 10:23:00 1256
原创 Epoll vs. IOCP
1 Epoll vs. IOCP Epoll 和 IOCP 都是为高性能网络服务器而设计的高效 I/O 模型;都是基于事件驱动的。事件驱动有个著名的好莱坞原则(“不要打电话给我们,我们会打电话给你”)。 不同之处在于: 1. Epoll 用于 Linux 系统;而 IOCP 则是用于 Windows ;(啊,好大的鸡蛋 … ) 2. Epoll 是当事件资源满足时发
2009-12-29 16:48:00 736
转载 __attribute__ 详解
From http://hi.baidu.com/cygnusnow/blog/item/8b82000f871fcf2f6159f3de.htmlGNU C的一大特色(却不被初学者所知)就是__attribute__机制。__attribute__可以设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attri
2009-12-25 11:18:00 1827
原创 数据加密算法 (概述)
常见用于保证安全的加密或编码算法如下:1、常用密钥算法 密钥算法用来对敏感数据、摘要、签名等信息进行加密,常用的密钥算法包括: DES(Data Encryption Standard):数据加密标准,速度较快,适用于加密大量数据的场合; 3DES(Triple DES):是基于DES,对一块数据用三个不同的密钥进行三次加密,强度更高; RC2和 RC4:用
2009-12-24 15:13:00 4465
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人