自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

wk_bjut_edu_cn的博客

fire in the hole!

  • 博客(15)
  • 资源 (2)
  • 收藏
  • 关注

原创 muduo库如何支持多线程

EventLoopThread(IO线程类)EventLoopThreadPool(IO线程池类)IO线程池的功能是开启若干个IO线程,并让这些IO线程处于事件循环的状态图中的每个Reactor都属于一个线程,mainReactor关注的是acceptor,也就是监听套接字相关的事件,subReactor关注的是已连接套接字相关的事件。也就是说,每新到一个连接,就选择一个subReacto...

2018-07-26 12:47:01 887

原创 简单线程池实现

目标1.用于执行大量相对短暂的任务2.当任务增加的时候能够动态的增加线程池中线程的数量值到达一个阈值3.当任务执行完毕的时候,能够动态的销毁线程池中的线程4.该线程池的实现本质上也是生产者与消费者模型的应用。生产者线程向任务队列添加任务,一旦队列有任务到来,如果有等待 线程就唤醒来执行任务,如果没有等待线程并且线程数没有达到阈值,就创建线程来执行任务。线程池拥有若...

2018-07-23 21:49:08 214

原创 Unix域套接字

Unxi域套接字并不是一个实际的协议族,而是在单个主机上执行客户/服务器通信的一种方法,所用API就是在不同主机上执行客户/服务器通信所用的API。可以视为IPC方法之一。UNix域提供两类套接字:字节流套接字(类似TCP),数据报套接字(类似UDP)UNIX域协议特点:1.Unix域套接字往往比通信两端位于同一主机的TCP套接字快出一倍。X Window System发挥了Unix域套...

2018-07-23 15:23:40 3456

原创 仿函数和配接器

先说一下STL提供的六大组件,彼此之间可以组合套用1、容器(Containers):各种数据结构,如:vector、list、deque、set、map。用来存放数据。从实现的角度来看,STL容器是一种class template。2、算法(algorithms):各种常用算法,如:sort、search、copy、erase。从实现的角度来看,STL算法是一种 function temp...

2018-07-22 20:16:25 412

原创 Effective C++(条款41-52)总结

条款41:了解隐式接口和编译期多态1.classes和templates都支持接口和多态(polymorphism)。2.对classes而言接口是显式的,以函数签名(函数名称、参数类型、返回类型)为中心。多态则是通过virtual函数发生于运行期。显式接口:由于下面代码w的类型被声明为Widget,所以w必须支持Widget接口。如w.size()的成员函数的调用,又如,temp.n...

2018-07-12 20:12:34 448

原创 Effective C++(条款26-40)总结

条款26:尽可能延后变量定义式的出现时间1.尽可能延后变量定义式的出现。这样可以增加程序的清晰度并改善程序效率。不只应该延后变量的定义,直到非得使用该变量的前一刻为止,甚至应该尝试延后这份定义直到能够给它初值实参为止。如果这样,不仅能够避免构造(和析构)非必要对象,还可以避免无意义的default构造行为。string encryptPassword(const string& ...

2018-07-11 21:35:07 622

原创 函数的重载、重写、重定义

函数重载(overload)函数重载是指在一个类中声明多个名称相同但参数列表不同的函数,这些的参数可能个数或顺序,类型不同,但是不能靠返回类型来判断。特征是:(1)相同的范围(在同一个作用域中);(2)函数名字相同;(3)参数不同;(4)virtual 关键字可有可无(注:函数重载与有无virtual修饰无关);(5)返回值可以不同;函数重写(也称为覆盖 override)...

2018-07-11 15:17:29 6326 1

原创 Effective C++(条款01-25)总结

条款01:视C++为一个语言联邦1.C2.面向对象的C++3.C++模板4.STL条款02:尽量以const,enum,inline替换#define1.对于单纯常量,最好以const对象或enum替换#define。const相比于define的好处: define直接常量替换,出现编译错误不易定位(不知道常量是哪个变量)define没有作用域,const...

2018-07-10 21:29:02 421

原创 C++初始化类的常量数据成员、静态数据成员、常量静态数据成员

有关const成员、static成员、const static成员的初始化:1、const成员:只能在构造函数后的初始化列表中初始化(C++98);   (C++11提供了类内初始化,因此内类常量可在声明类时进行类内初始化,因此该类内常量的作用域属于类级,即该类的所有对象均具有同一个值。)#include <iostream>using namespace std;class A ...

2018-07-10 10:22:08 8248 2

原创 匿名管道和有名管道

1. 管道的概念本质:          内核缓冲区  伪文件 - 不占用磁盘空间特点: 两部分: 读端,写端,对应两个文件描述符 数据写端流入, 读端流出 操作管道的进程被销毁之后,管道自动被释放了 管道读写两端默认是阻塞的 2. 管道的原理内部实现方式:队列 环形队列 特点:先进先出缓冲区大小: 默认4k,通过ulimit -a查看3. 管道的局限性队列: 数据只能读取一次,不能重复读取半...

2018-07-08 17:27:20 1414

原创 muduo实现的客户端与服务端连接

下面就是利用muduo进行客户端与服务器端的实例:网络编程关注三个半事件:连接建立、连接断开、消息到达这算三个,还有半个是消息发送完毕(之所以是半个,因为对于低流量的服务,通常不需要关注该事件)所以,我们利用muduo编写自己的服务器时,需要有一个XXXServer类,在该类中包含一个TcpServer对象和一个EventLoop对象。这个类需要提供3个成员函数OnConnection、O...

2018-07-06 13:02:19 1198

原创 Buffer类的设计

应用层缓冲区Buffer设计muduo的I/O模型是I/O复用,并且文件描述符设置为非阻塞模式,因为如果使用阻塞模式,I/O线程就有可能阻塞在read、write这些系统调用之上,这样一来,即使其它描述符的IO事件到来,IO线程也不能立刻去处理,也就不能最大程度的使用IO线程。为什么TcpConnection必须要有output buffer?考虑一个常见场景:程序想通过 TC...

2018-07-03 20:10:51 1153

原创 muduo中TcpServer、TcpConnection执行过程

muduo中的Acceptor类的主要功能是socket、bind、listen,Acceptor用于accept接受TCP连接一般来说,在上层应用程序中,我们不直接使用Acceptor,而是把它作为TcpServer的成员TcpServer还包含了一个TcpConnection列表这是一个已连接列表。TcpConnection与Acceptor类似,有两个重要的数据成员,Socket与...

2018-07-03 14:59:40 712

原创 muduo库中的异步调用

线程间的等待通知pipesocketpaireventfd条件变量前三个都有文件描述符,都可以方便的利用I/O复用来管理,而条件变量没有#include <sys/eventfd.h>int eventfd(unsigned int initval, int flags);mduo库的线程唤醒利用的eventfd,eventfd 是一个比 pipe 更高效的线...

2018-07-02 15:37:42 956 1

原创 定时器

muduo的定时器由三个类实现,TimerId、Timer、TimerQueue,用户只能看到第一个类,其它两个都是内部实现细节TimerQueue的接口很简单,只有两个函数addTimer和cancel我们实际上在使用定时器的时候,并没有直接调用addTimer和cancel,而是调用EventLoop中的下列函数runAt           在某个时刻运行定时器runAfter ...

2018-07-02 11:12:55 372

强制访问控制小程序

用MFC写的一个强制访问控制的小程序,需要自己创建txt文档

2018-03-16

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除