- 博客(22)
- 资源 (21)
- 问答 (5)
- 收藏
- 关注
原创 事件处理模式 Reactor----------Proactor
服务器程序通常需要处理三类事件:I/O事件 信号 定时事件 Reactor模式,它要求主线程(I/O处理单元)只负责监听文件描述符上是否有事件发生,有的话就立即将该事件通知工作线程(逻辑单元)。除此之外,主线程(I/O处理单元)不作任何其他实质性工作。读写数据,接收新的连接,以及处理客户请求均在工作线程(逻辑单元)完成。使用同步I/O模型(以epoll_...
2018-08-17 19:27:17
430
1
原创 服务端开发框架
I/O处理单元是服务器管理客户连接的模块。它通常要完成以下工作:等待并接受新的客户连接,接收客户数据,将服务器响应数据返回给客户端。但是数据的收发不一定在I/O处理单元中执行,也可能在逻辑单元中执行,具体在何处执行取决于事件处理模式。对于一个服务器机群来说,I/O处理单元是一个专门的接入服务器。它实现负载均衡,从所用逻辑服务器中选取负荷最小的一台来为新客户服务。 ...
2018-08-17 16:11:05
601
原创 高性能定时器------------时间堆
基于升序链表的定时器(https://blog.csdn.net/destory27/article/details/81748580)和时间轮定时器(https://blog.csdn.net/destory27/article/details/81750790)都是以固定的频率调用tick,并在其中依次检测到期的定时器,然而执行到定时器上的回调函数.设计定时器的另一种思路是:将所有的定...
2018-08-17 11:10:48
582
原创 高性能定时器-------时间轮
基于排序链表的定时器(https://blog.csdn.net/destory27/article/details/81748580)存在一个问题:添加定时器的效率偏低。 如图所示时间轮内,指针指向轮子上的一个槽,它以恒定的速度顺时针旋转,每旋转一步就指向先一个槽.该时间轮共有N个槽,旋转一周的时间是N*Si,每个槽指向一条定时器链表,没条链表上的定时...
2018-08-16 23:50:43
1040
原创 基于升序链表的定时器 - 处理非活动连接
服务器程序通常要定期处理非活动连接:给客户端发送一个重连请求,或者关闭该连接。利用alarm函数周期性的触发SIGALRM信号, 该信号的信号处理函数利用管道通知主循环执行定时器链表上的定时器任务---关闭非活动的连接。 采用升序双向链表实现定时器的功能,核心函数tick,它每隔一端固定时间就执行一次,以检测并处理到期的任务。判断定时器任务到...
2018-08-16 20:51:59
645
原创 IO多路复用-select
select系统调用的目的是:在一段指定时间内,监听用户感兴趣的文件描述符上的可读、可写和异常事件。poll和select应该被归类为这样的系统 调用,它们可以阻塞地同时探测一组支持非阻塞的IO设备,直至某一个设备触发了事件或者超过了指定的等待时间——也就是说它们的职责不是做IO,而是帮助 调用者寻找当前就绪的设备。#include <sys/select.h>#inc...
2018-04-20 21:06:13
293
原创 I/O多路复用
参考:https://www.zhihu.com/question/28594409 I/O多路复用(multiplexing)的本质是通过一种机制(系统内核缓冲I/O数据),让单个进程可以监视多个文件描述符,一旦某个描述符就绪(一般是读就绪或写就绪),能够通知程序进行相应的读写操作。 与多线程和多进程相比,I/O 多路复用的最大优势是系统开销小,系统不需要建立新的进程或者线程...
2018-04-19 09:07:54
177
原创 私有数据--TSD
在多线程环境下,进程内的所有线程共享进程的数据空间,因此全局变量为所有线程共有。在程序设计中有时需要保存线程自己的全局变量,这种特殊的变量仅在某个线程内部有效。如常见的变量errno,它返回标准的出错代码。errno不应该是一个局部变量,几乎每个函数都应该可以访问它;但它又不能是一个全局变量,否则在一个线程里输出的很可能是另一个线程的出错信息,这个问题可以通过创建线程的私有数据(TS...
2018-04-15 14:11:28
469
原创 Linux- 线程间同步
线程是允许应用程序并发的执行多个任务的一种机制。一个进程可以有多个线程,如果每个线程执行不同的任务,通过对线程的执行顺序进行控制(调度)就可以实现任务的并发执行。当然了多进程也可以实现任务的并发处理,但是两者之间是有区别的。最大的区别就是拥有的资源不同。进程拥有自己的独立系统资源,而线程没有独立资源,只能和属于同一进程的其他线程共享进程的系统资源。单个资源在多个用户之间共享就会存在一致性的...
2018-04-15 11:07:02
298
原创 守护进程
守护进程 1.让进程在后台执行。方法是调用fork产生一个子进程,然后使得父进程退出。 2.调用setsid创建一个新会话。控制终端,登录会话和进程组通常是从父进程继承下来的,守护进程要摆脱它们,不受它们影响,其方法是调用setsid使进程成为一个会话组长。 Linux中的进程与控制终端,登录会话和进程组之间的关系:进程属于一个进程组,进程组号(GID)就是进程组长的进程号(PID)。登录会...
2018-04-10 15:50:22
301
原创 Linux libconfig配置文件库读取
1 libconfig是什么? Libconfig是一个结构化的配置文件库,它可以定义一些配置文件,例如test.cfg . 它比xml可读性更好,而且更简洁。而且不像xml,它是 type-aware类型自我感知的,因此不需要做string parsing (分词?). 而ini太弱。2 配置文件说明 libconfig支持结构化、层次化的配置。这些配置可以从文件中读取或写入文件,...
2018-03-25 10:30:29
5276
原创 A星寻路算法
代码:http://download.csdn.net/download/destory27/10276243在游戏中,有一个很常见地需求,就是要让一个角色从A点走向B点,我们期望是让角色走最少的路。嗯,大家可能会说,直线就是最短的。没错,但大多数时候,A到B中间都会出现一些角色无法穿越的东西,比如墙、坑等障碍物。这个时候怎么办呢? 是的,我们需要有一个算法来解决这个问题,算法的目标就是计算出两点...
2018-03-08 21:17:00
523
原创 试题库管理系统--数据库设计
一、概要设计1.1 背景和意义目前,许多高校绝大多数课程还采用考教统一的模式来完成教学过程,这种传统的考试模式在教学到实施考试的过程带有很大的主观随意性和不规范性。另外随着各高校近年来学生规模的扩大,教学任务日益繁重,教师的工作量相应的不断增加。迫切需要计算机辅助教学系统来打破这种传统的教学模式,减轻教师的工作负担,提高教学质量。因此,本文研究设计了一个试题库管理系统,来解决和缓解高校课程
2017-12-28 09:14:02
93583
76
原创 使用qstandarditemmodel获取qtableview中复选框的数据
类QStandardItemModel负责保存数据,每个数据项被表示为类QStandardItem的对象。当一个数据项被显示在视图中时,它往往包含一些文字、一个图标,还可能包含一个复选框。 QStandardItemModel *m_pModel = new QStandardItemModel(ui->tableView);//为QTableView设置
2017-12-26 12:12:30
7611
3
转载 C++11特性
0 简介1 候选变更2 C++核心语言的扩充3 核心语言的运行期表现强化3.1 右值引用和 move 语义3.2 泛化的常数表示式3.3 对POD定义的修正4 核心语言建构期表现的加强4.1 外部模板5 核心语言使用性的加强5.1 初始化列表5.2 统一的初始化5.3 类型推导5.4 基于范围的 for 循环5.5 Lambda函数与表达式5.6 一种新的函数语法5.7 对象建构的改良5.8 显式虚函数重载5.9 空指针常量5.10 强类型枚举5.11 右尖括号5.
2017-11-08 22:41:55
409
转载 关系型数据库的设计范式 1NF 2NF 3NF BCNF
1NF是所有关系型数据库的最基本要求,第二范式(2NF) 2NF在1NF的基础之上,消除了非主属性对于码的部分函数依赖。第三范式(3NF)3NF在2NF的基础之上,消除了非主属性对于码的传递函数依赖。
2017-11-01 21:28:55
1857
原创 SQL的四种连接-左外连接、右外连接、内连接、全连接
1、内联接(典型的联接运算,使用像 = 或 <> 之类的比较运算符)。包括相等联接和自然联接。 内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行。例如,检索 students和courses表中学生标识号相同的所有行。 2、外联接。外联接可以是左向外联接、右向外联接或完整外部联接。 在 FROM子句中指定外联接时,可以由下列几组关键字中的一组指定: 1)LEFT JOIN或LEFT OUTER JOIN 左向外联接的结果集包括 LEF
2017-11-01 21:01:03
331
转载 C++中 typename 和 class 的区别
问题:在下面的 template declarations(模板声明)中 class 和 typename 有什么不同? ·在声明 template parameters(模板参数)时,class 和 typename 是可互换的。·用 typename 去标识 nested dependent type names(嵌套依赖类型名),在 base class lists(基类列表)中或在一个 member initialization list(成员初始化列表)中作为一个 base class i
2017-09-17 11:30:00
329
转载 error LNK2001: 无法解析的外部符号 Qt的moc机制
error LNK2001: 无法解析的外部符号 Qt的moc机制error LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject const * __thiscallMainWindowBottomWidget::metaObject(void)const " ()
2017-09-16 16:27:54
2899
原创 简单静态库与动态库的创建以及Makefile基本使用
静态库的创建以及使用: gcc -c log.c |生成 log.o 文件 ar cr libstatic.a log.o |创建静态库libstatic.a 并将 .o 问价链接到 .a 文件中 gcc main.c -L. libstatic.a log.h -o out |-L:链接库 .:表示当前目录 后跟要链接的库和头文件, 生成可执行程序out动态库的创建以及使用: gcc -c -fPIC log
2017-04-24 17:37:26
2176
原创 auto,register,static,const,volatile的区别
(1)auto 这个关键字用于声明变量的生存期为自动,即将不在任何类、结构、枚举、联合和函数中定义的变量视为全局变量,而在函数中定义的变量视为局部变量。这个关键字不怎么多写,因为所有的变量默认就是auto的。 (2)register 这个关键字命令编译器尽可能的将变量存在CPU内部寄存器中而不是通过内存寻址访问以提高效率。 (3)static 常见的两种用途:
2017-02-09 20:04:01
306
原创 Ubuntu中安装gcc编译器以及使用方法
1.安装 1.在Ubuntu中打开终端(可点击桌面图标Ubuntu,进入之后输入terminal;或点击鼠标右键,选择打开终端); 2.在终端中输入 gcc -v 可查看gcc版本信息 然后输入 sudo apt-get update (系统升级) 完成之后输入 sudo apt-get build-dep gcc 或sudo in
2016-06-22 16:10:27
7023
王道-程序员求职宝典
2019-04-23
深度探索C++对象模型
2019-04-23
java数据结构与算法第二版
2019-04-23
linux_c第三方库
2018-03-24
A星寻路算法
2018-03-08
数据结构与算法分析C++描述第三版.pdf
2018-01-26
试题库管理系统
2018-01-03
页式虚存管理
2017-11-28
计算机操作系统 第三版
2017-11-11
gdb完全手册
2017-09-03
Makefile.pdf
2017-09-03
vbird-linux-basic-4e-脚本之家
2017-09-02
Linux多线程编程手册
2017-09-02
高质量C编程指南
2017-09-02
Linux_C编程一站式学习_最新版.pdf
2017-08-26
[汇编语言].冯康.扫描版
2016-12-27
Shell脚本学习指南
2016-12-27
WebMvcConfigurer时间类型转换运行时机
2020-07-15
Qt5.4.1 无法连接SqlServer
2017-12-17
Qt 5.4.1 连接MySql 查询中文乱码?
2017-11-27
QT 5.5.1 无法解析的外部符号
2017-09-16
加减乘除放在东边 4行1列
2016-11-14
TA创建的收藏夹 TA关注的收藏夹
TA关注的人