- 博客(14)
- 收藏
- 关注
原创 高效并发模式,半同步半异步和领导者追随者
首先来看同步与异步到底是什么呢? 在计算机领域,同步就是指一个进程在执行某个请求的时候,若该请求需要一段时间才能返回信息,那么这个进程将会一直等待下去,直到收到返回信息才继续执行下去;异步是指进程不需要一直等下去,而是继续执行下面的操作,不管其他进程的状态。当有消息返回时系统会通知进程进行处理,这样可以提高执行的效率。 而我们平时经常讨论的同步问题多发生在多线程环境中的数据共享问题...
2017-11-22 21:00:08
713
原创 进程间通讯
进程间通讯方式(IPC)::无名管道 有名管道 信号量 共享内存 消息队列 信号 套接字 多机通讯1、有名管道:: 在文件目录树中创建一个文件标识(管道文件),实际不占据磁盘空间,在内存上进行,应用于任意两个进程之间数据单向链接;在使用时,在内存上开辟一段空间,A传给B,A写B读,
2017-11-20 23:06:41
414
原创 多进程与多线程
多进程:: 优点: ① 编程相对容易;通常不需要考虑锁和同步资源的问题。 ② 更强的容错性;比起多线程,一个进程崩了不会影响其他进程。 ③ 有内核保证的隔离;数据和错误隔离。 对于使用C/C++这些语言编写的本地代码,错误隔离是非常有用的,采用多进程架
2017-11-16 16:31:41
387
原创 fork与vfork函数
一个现有进程可以调用fork函数创建一个新进程。 pid_t fotk(void); 返回值:子进程中返回0,父进程中返回子进程ID,出错返回-1; 由fork创建的新进程被称为子进程。fork函数被调用一次,但返回两次。两次返回的唯一区别是子进程的返回值是0,而父进程的返回值则是新子进程的进程ID。将子进程ID返回给父进程的理由是:因为一个进程的子进程可以有多个,并
2017-11-08 21:31:08
465
原创 生产者消费者模式
什么是生产者消费者模式 生产者消费者模式是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取,阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力。这个阻塞队列就是用来给生产者和消费者解耦的。多生
2017-11-08 20:26:22
392
原创 I/O复用
I/O复用使得程序能同时监听多个文件描述符,这对提高程序的性能至关重要。通常网络程序在下列情况下需要使用I/O复用技术。1、客户端程序要同时处理多个socket。2、客户端程序要同时处理用户输入和网络连接。3、TCP服务器要同时处理监听socket和连接socket。这是I/O复用使用最多的场合。4、服务器要同时处理TCP请求和UDP请求。5、服务器要同时监听多个端口,或者
2017-10-31 20:16:49
345
原创 TCP的可靠性
TCP提供一种面向连接的,可靠的字节流服务,面向连接意味着两个 使用TCP的应用(通常是一个客户和一个服务器)在彼此交换数据之前必须先建立一个TCP连接 TCP通过以下几种方式提供可靠性的: ① 面向字节流和缓存机制: 应用数据被分割成TCP认为最合适发送的数据块,这和UDP完全不同,应用程序产生的数据长度将保持不变,由TCP传递给IP
2017-10-31 19:41:57
706
原创 局域网聊天项目
要设计: 本项目主要由服务器端和客户端两大模块组成,每个模块的主要功能有: 服务器端: 利用多线程实现并行,结合半同步半异步的网络模型完成线程之间的任务分工,利用socket_pair完成线程之间的数据交互 1>负责绑定与监听目标端口 2>为每个客户建立连接,并将套接字按照子线程压力分发给子线程监听,子线程
2017-10-26 20:19:04
959
原创 多重继承(菱形继承)
多重继承: 经典的是菱形继承,如图。菱形继承将会产生的问题: 把基类A中的成员变量通过B和C两次继承至D。D的继承结构:可以看到,ma被继承两次至D;那么将如何解决这个问题呢? 采用虚继承的方法,将基类A中的ma直接继承至D。代码如下:class A{public: A(int data):ma(data){
2017-09-24 12:01:41
1076
原创 C++继承与多态
简单地说,那些被virtual关键字修饰的成员函数,就是虚函数。虚函数的作用,用专业术语来解释就是实现多态性(Polymorphism),多态性是将接口与实现进行分离;用形象的语言来解释就是实现以共同的方法,但因个体差异,而采用不同的策略。先来看一个例子。class Base{public: Base(int a):ma(a){cout<<"Base()"<<endl;}
2017-09-23 14:06:31
282
原创 C++继承与派生
面向对象语言的四大特征: 抽象 封装 继承 多态 类 :封装和隐藏 模 板 :对类型进行参数化运算符重载:对象的运算和基本类型的运算保持一致继承 :为了代码的重用,保留基类的原本结构,并新增派生类的部分,同时可能覆盖(overide)基类的某些成员。派生类:继承除基类构造函数、析构函数以外的所有成员
2017-09-23 11:56:45
324
原创 C++程序的简单执行过程
编译阶段: main.c---预编译--->main.i----编译-->main.s----汇编--->*.o/*.obj(二进制可重定位目标文件) 预编译:删注释,#:预编译指令 编译:语法、语义分析,代码的优化,汇总所有的符号 汇编:把汇编指令转化成特定平台的机器码 数据
2017-09-13 19:48:58
766
原创 类和对象的生存周期
显示生成临时对象 ①//①CGoods goods = CGoods("bbb",90,9.8);//不产生临时对象,调用构造函数初始化goods//②goods = CGoods("bbb",90,9.8);//先构造临时对象,再赋值给goods,再析构临时对象//③goods = (CGoods)("bbb",90,9.8);//产生临时对象,调用CGoods(doub
2017-09-08 22:11:51
625
原创 栈帧的开辟与回退
首先,要知道栈是什么? 栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。允许插入和删除的一端称为栈顶(esp),另一端则为栈底(ebp),所以栈又被称为后进先出的线性表(LIFO); 在内存中空间的分配是高地址向低地址递增的。 那么,栈帧又是什么? 栈帧也叫过程活动记录,是编译器用来实现过程/函数调用的一种数据结
2017-09-06 18:58:47
616
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅