- 博客(15)
- 资源 (6)
- 收藏
- 关注
原创 Unix/Linux下5种I/O模型
1. 五种I/O模型在网络编程,经常接触下述的I/O相关的概念: 同步(Synchronous) 异步(Asynchronous) 阻塞(Blocking) 非阻塞(Non-blocking) 信号驱动(Signal driven) 他们之间的关系如下图: 引用网上一个比喻: 你打电话问书店老板有没有《分布式系统》这本书,如果是同步通信机制,书店老板会说,你稍等,”我查一下”,然后开始
2016-07-26 17:39:59 1210
原创 C++四大类型转换
C++ 是一门强类型语言(C语言是弱类型语言),不同自定义类型之间的转换必须进行显式转换。C++ 中提供了四种转换操作符来细分显式类型转换。因为是操作符,所以他们不属于任何的namespace,也就不用包含任何头文件就可以使用。static_cast <new_type> (expression) const_cast <new_type> (expression) reinterpret_cast
2016-07-19 17:17:41 2687
原创 Unix系统编程(8) - I/O多路复用之epoll(Linux)
1. epoll的由来epoll是在Linux 2.6.28内核提出的,是select和poll的强化升级版本。相比select和poll,epoll更灵活,没有描述符限制。epoll在Unix中是没有的。 epoll使用一个文件描述符管理多个描述符,将用户关系的文件描述符的事件存放到内核的一个事件表中,这样在用户空间和内核空间的copy只需一次。2. epoll的使用Linux 2.6.28之后
2016-07-19 15:58:10 1403
原创 Unix系统编程(7) - I/O多路复用之poll
poll的机制与select类似,与select在本质上没有多大差别,管理多个描述符也是进行轮询,根据描述符的状态进行处理,但是poll没有最大文件描述符数量的限制。 poll和select同样存在一个缺点就是,包含大量文件描述符的数组被整体复制于用户态和内核的地址空间之间,而不论这些文件描述符是否就绪,它的开销随着文件描述符数量的增加而线性增大。服务端代码下载:#include <stdio.h
2016-07-19 15:38:04 1357
原创 Unix系统编程(6) - I/O多路复用之select
1. I/O多路复用基本思路I/O多路复用就是让应用程序可以同时对多个I/O端口进行监控以判断其上的操作是否可以进行,达到时间复用的目的。由于I/O多路复用是在单一进程的上下文中的,因此每个逻辑流程都能访问该进程的全部地址空间,所以开销比多进程低得多。由于I/O多路复用都是在单一进程中进行的,所以不会出现多线程中的线程不安全的问题。2. select模型在man page中给出的select函数原型
2016-07-17 15:19:14 1379
原创 Unix系统编程(5) - 多线程并发服务器
1. 多线程 & 多进程线程是进程内的独立执行实体和调度单元。又称为“轻量级”进程。创建线程比创建进程要快10~100倍(数据待考证),又因为一个进程下的所有线程都共享一些内核资源,相比多进程并发服务器来说,多线程并发服务器在节省资源上比多进程并发服务器更有优势。 线程共享资源与独占资源如图: 多线程下并发服务的模型与多进程下基本一致,多线程并发服务器总是让主线程处于阻塞监听状态。一旦有
2016-07-16 08:48:56 1315
原创 Unix系统编程(4) - 多进程并发服务器
1. 迭代服务器 & 并发服务器服务器按照 处理方式 来看可以分为: - 迭代服务器 迭代服务器只能一次处理一个客户的请求。也就是说在服务器响应一个客户请求时,如果有另一个客户发起请求是不能得到及时响应的。下图是一个典型的迭代服务器处理流程。 - 并发服务器 并发服务器则能同时处理多个客户端请求。下图是一个基于多进程模型的并发服务器处理流程。 2. 多进程并发服务器 1
2016-07-14 20:42:20 1731
转载 让你不再害怕指针
(0)让你不再害怕指针--复杂类型说明 要了解指针,多多少少会出现一些比较复杂的类型,所以我先介绍一下如何完全理解一个复杂类型,要理解复杂类型其实很简单,一个类型里会出现很多运算符,他们也像普通的表达式一样,有优先级,其优先级和运算优先级一样,所以我总结了一下其原则: 从变量名处起,根据运算符优先级结合,一步一步分析. 下面让我们先从简单的类型开始慢慢分析吧:
2016-07-13 16:22:35 1160
原创 设计模式学习(代理模式)
代理模式是为其他对象提供一种代理以控制对这个对象的访问。 #include <iostream> using namespace std;class Interface { public: virtual void Request() = 0; };class RealClass : public Interface { public: void Request() {
2016-07-07 14:46:53 848
原创 设计模式学习(原型模式)
原型模式是一种对象创建型模式, 它采取复制原型对象的方法来创建对象的实例。使用原型模式创建的实例,具有与原型一样的数据。 原型模式适用于一个复杂对象,具有自我复制功能,统一一套接口。 #include <iostream> #include <string> using namespace std;class Person { public: virtual Person* Clon
2016-07-07 14:32:52 494
原创 设计模式学习(建造者模式)
* 1. 建造者模式 *建造者用来隐藏复合对象的创建过程,它把复合对象的创建过程加以抽象,通过子类继承和重载的方式,动态地创建具有复合属性的对象。建造者模式适用于: 一个对象的构建比较复杂,将一个对象的构建和对象的表示进行分离。 实际应用中,建造者模式出现的不多(还没见过)。2. 案例以一个建造房子的案例为例: 上述类图中,对象的创建是通过Director类来控制一个FlatBuil
2016-07-06 17:15:16 643
原创 设计模式学习(工厂模式)
这里说的工厂模式是简单工厂模式和抽象工厂模式,两者有一定的区别,也有共同之处。 简单工程模式:通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。 抽象工厂模式:在简单工厂模式的基础上对用于创建其他类的类进行抽象,这样使得系统在不修改具体工厂角色的情况下进行扩充。 上述过程是开闭原则的一个典型体现。1. 简单工厂模式在下图的例子中,Factory类依赖具体对象的抽象来创建具体
2016-07-06 16:47:38 605
原创 设计模式学习(单例模式)
单例模式:一个类只有一个实例对象存在。 单例模式一般有两种实现方式,一种称为懒汉式,另一种称为饿汉式。1. 懒汉式单例模式懒汉式单例模式的思想很简单,在或者单例对象的时候总是去判断对象是否已经生成,如果对象已经生成,那么就直接返回对象的指针。#include <iostream>using namespace std;//懒汉式 单例模式 class Singleton { private:
2016-07-05 16:52:10 550
原创 UML标准建模语言
UML:Unified Modeling Language,统一建模语言(标准建模语言)。内容预览: 1. UML用例图UML用例图是用来描述使用者,用例之间关系的一种UML图。一般使用在项目初期,用于描述客户的需求,分析客户所描述的功能。 下图中任务形状的图像元素表示的是使用者,椭圆形表示的是用例,他们之间的连线则表示了他们的关系。图中描述注册用户和签约用户与4大用例之间的关系。
2016-07-05 16:21:52 1385
原创 设计模式学习(开篇)
个人理解:设计模式就是用来将项目源码进行合理的组织,方便项目的扩展,维护。设计模式应该是一个长期的反思和总结的过程。工程经验越丰富可能对设计模式的理解就会变得越深刻。设计模式一共有23种,下图是我在学习设计模式时候列举的一个思维导图。为了方便日后查阅和反复的思考,遂以笔记的方式将学习设计模式的过程总结一下。
2016-07-05 15:30:37 731
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人