- 博客(22)
- 收藏
- 关注
原创 高性能服务器编程-I/O复用
一、概念1、作用 将获取数据的操作延后到数据到达以后。数据到达以后,有数据的文件描述符上会有一个就绪事件,服务器只需要处理就绪事件就可以。这样单进程、单线程就可以同时监听多个文件描述符。下面讨论的I/O复用方式都是单进程的。2、linux下实现I/O复用的系统调用主要有:select、poll、epoll二、select1、作用 在一段时间内,采用轮询方式监听用户感兴趣的文
2017-11-24 20:53:14 306
原创 高性能服务器编程-线程池
之前介绍了两种高性能服务器编程,今天介绍第三种-线程池。一、概念1、为什么要有池? 多线程如果存在客户端链接,创建一个函数线程,客户端关闭,释放线程,服务器大多时间消耗在创建线程,释放线程。这样对于业务的处理时间就会大大减少,所以引入了池来解决问题。2、池:初始时,申请比刚开始要使用的资源大的多的资源空间,接下来使用时,直接从池中获取资源。3、线程池:在服务器运行开始时,创建
2017-11-21 17:15:17 408
原创 面向对象(二)
在之前已经大概介绍了类的概念,大家对类应该有了初步的了解,今天给大家介绍一个系统提供的六种函数,具体看前四种。系统提供函数函数的特点:(1)公有的 (2)内联的(无堆栈的开辟和清理,只是在函数调用点展开) 一、构造函数作用:初始化对象的内存地址空间,构造函数名与类名相同。例子:有一个商品类,
2017-11-14 17:18:22 235
原创 面向对象(一)
一、面向对象含义 之前一直都说面向对象和面向过程,具体是什么含义,并不清楚,自从学习了C++课程后,才知道什么是面向对象。接下来,用图片说明实体、ADT、类和对象四者间的联系。 总结一下,整个过程就是将现实生活中存在的实体抽象成抽象数据类型,然后转换成计算机语言中的类,再通过实例化过程实例化一个对象。当然类可以实例化多个对象,而且多个对象的属性是私有的,行为确是公有的。就像是我们人
2017-11-13 21:32:19 183
原创 网络编程(二)
在之前的博客中,介绍了传输层的一种重要协议-TCP协议。今天来介绍另外一种传输层协议-UDP UDP:无连接的、不可靠的、数据报服务。 首先看一下UDP报头: 从上图可以看出,UDP协议报头比TCP协议报头简单很多,没有TCP报头里面那么多的保证机制,所以UDP较比TCP简单。 UDP无连接:UDP协议中没有TCP协议里的三次握手和四次挥手的过程,双方没有严格的
2017-11-11 23:01:15 223
原创 网络编程(一)
大家都知道在网络上有两种角色,一个是服务器,另外一个是客户端,那么什么是服务器,什么又是客户端呢?客户端和服务器如何进行通信的呢?接下来我就给大家简单讲一讲网络上通信的过程。 服务器(server):提供数据的为服务器 客户端(client):获取数据的为客户端 在之前的学习中,我们知道了网络的分层,有两种模型分别是OSI模型和TCP/IP模型,我们一般讲的是后者。TCP/IP模
2017-11-11 19:45:14 208
原创 C和C++的区别
c语言已经告一段落,最近又学习了新的知识—C++。那么c语言和C++到底有什么区别呢? 1、C++中有带默认值的函数 2、C++中有内联函数(inline) (1)内联函数:在函数的调用点,把函数的代码全部展开。 (2)内联函数与宏的区别: A、宏-在预编译阶段,没有类型检查,不安全,且用宏的代码无法进行调试。 B、内联函数-在编译阶段,有类型检
2017-11-05 22:22:33 299
原创 线程
一、线程简介 一说起进程大家都很熟悉,进程是运行中的程序,更具体一点说,是一组有序指令、资源、数据的集合。那么线程是什么呢?下面就让我揭开线程的神秘面纱吧。 1、线程的定义 线程是进程内部的一条执行序列(又称执行流)。每个进程至少有一条执行序列,那就是main的执行体,main函数所代表的线程叫主线程。进程可以通过线程库创建若干条线程,这些新被创建的进程称之为函数线程。
2017-10-31 16:36:12 173
原创 虚拟内存
例子:定义一个结构体struct struct Node { int data; struct Node *next; }Node; struct Node *p=NULL; 操作:p->data或者p->next时,结果就会崩溃。因为0是不可访问的空间。
2017-10-28 23:07:25 193
原创 进程间通讯-共享存储
共享存储允许两个或更多进程共享一给定的存储区。 1、shmget函数 int shmget((key_t)key,size_t size,int flag);返回值:若成功返回共享存储ID,失败则返回-1。
2017-10-24 13:09:40 505
原创 进程间通讯-消息队列
一、什么是消息队列 消息队列是消息的链接表,存放在内核中并由消息队列标识符标识。消息队列向我们提供了一个进程向另一个进程发送数据块的方法。每个数据块都被认为含有一种类型,接受进程可以独立地接受含有不同类型的数据结构。二、在linux中使用消息队列 在linux中提供了一系列消息队列的函数接口来让我们方便地使用它来实现进程间的通信。它的用法与信号量机制相似 1、msgge
2017-10-20 13:03:28 275
原创 进程间通讯-无名管道
在上次的博客中,我给大家介绍了进程间通讯的方式-有名管道。管道分为有名管道和无名管道,那么此次我将给大家介绍一下另一种管道通讯-无名管道。 有名管道是可以应用于任何两个进程之间数据的单向传递,而无名管道是相对于有名管道的,无名管道在使用时产生,不使用后释放,并不会在系统上留下任何痕迹。 无名管道因其使用前没有任何的标示,所以它只能应用于父子进程之间。原因是:调用fork函数父进程产
2017-10-19 23:24:56 258
原创 进程间通讯-有名管道
大家都知道,在一个电脑上,同一时间同时运行着很多进程,各个进程之间单独运行,但是也有一些进程需要进行通信,那么进程间又如何进行通信呢?今天我就跟大家讲讲进程间是如何通过管道通信的。 进程间通信:是指多个进程之间数据相互转换。 进程间通讯的方式: 单机通讯:信号、管道(有名管道、无名管道)、信号量、消息队列、共享存储 多机通讯:套接字(socket) 管
2017-10-19 22:02:33 245
原创 单链表的逆置
首先先来看一下链表的结构,如下图结构体所示,链表的节点包括两部分,数据域和指针域。 typedef struct Node { int data;//数据域 struct Node *next;//指向下一个节点 }Node,*List;
2017-09-23 23:15:09 612
原创 define与typedef
很多同学对define很熟,对typedef也很熟,但是当define和typedef相遇的时候,就犯迷糊了。那么,define和typedef到底是什么关系?它们之间的区别在哪里?它们各自的含义是什么呢?请看下文 1、typedef 意思是重定义类型,它就相当于给较长的类型起一个简短的易懂的别名,就相当于在生活中你给你朋友起一个你认为好听又好记的小名,以后的称呼就是这个小名。例如,我
2017-09-23 14:06:30 325
原创 创建进程-fork函数
最近,我在Linux中学到了一个神奇的函数,名为fork()函数,它的作用是创建进程。它的神奇之处在于调用fork()函数时,系统会创建一个与原来进程几乎完全相同的进程,大致的意思就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事 。就相当于是克隆了一个自己。 先来看一个例子 大家一定都很好奇结果是什么?那么结果到
2017-09-13 22:01:46 323
原创 const
一、定义 const是一个C语言的关键字,它的作用是限定一个变量不允许被改变。使用const在一定程度上可以提高程序的安全性和可靠性。另外,在看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一些帮助。另外const在其他编程语言中也有出现,如C++等。 常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值一般是不能被更新的。(当然,我们可以偷
2017-09-11 09:50:35 220
原创 中缀表达式的转换
今天,我给大家介绍一下中缀表达式、后缀表达式和前缀表达式,以及三者之间的转换。 中缀表达式:是一个通用的算术或逻辑公式表示方法。通俗来说就是我们现在人为使用的表达式,例如3+4,而这种表达式是方便人查看的。 前缀表达式:又称波兰式,是指运算符在运算数之前的表达式,例如+ 3 4。 后缀表达式:又称逆波兰式,是指运算符在运算数之后的表达式,例如3 4 +。前缀表达
2017-08-26 22:28:00 329
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人