- 博客(12)
- 资源 (2)
- 收藏
- 关注
原创 muduo网络库学习之EventLoop(一):事件循环类图简介
番外TCP网络编程本质 TCP网络编程最本质是的处理三个半事件连接建立:服务器accept(被动)接受连接,客户端connect(主动)发起连接连接断开:主动断开(close、shutdown),被动断开(read返回0)消息到达:文件描述符可读 消息发送完毕:这算半个。对于低流量的服务,可不必关心这个事件;这里的发送完毕是指数据写入操作系统缓冲区,将由TCP协议栈负责...
2018-06-29 15:17:35 2776
原创 多线程与并发服务器设计
常见并发服务器方案1.iterative(循环式/迭代式)服务器 iterative 只能使用短连接(每处理完一个连接,然后就关闭连接,称为短连接),不能使用长连接,如果使用长连接,意味着write需要转到read,那么整个程序就是一个单线程程序,如果此时有其它线程过来,没有办法接受连接,因为前一个线程还在read->write的循环中。也就是说如果使用长连接的话,这个程序...
2018-06-28 21:06:20 2784
原创 muduo基础库
muduo是一个高质量的Reactor网络库,采用one loop per thread + thread pool架构实现,代码简洁,逻辑清晰,是学习网络编程的很好的典范。为什么需要网络库使用Sockets API进行网络编程是一件简单地技术,但是高级语言的Sockets库并没有对Sockets API提供更高层次的封装,直接用它编写网络程序很容易掉到陷阱里,因此需要网络库来降低开发难度...
2018-06-28 18:10:40 2753
原创 Linux中的线程
一. 概念 首先Linux并不存在真正的线程,Linux的线程是使用进程模拟的。当我们需要在一个进程中同时运行多个执行流时,我们并不可以开辟多个进程执行我们的操作(32位机器里每个进程认为它 独享 4G的内存资源),此时便引入了线程,例如当我们既需要下载内容,又需要浏览网页时,此时多线程便起了作用。线程是承担调度的基本单位,一个进程可拥有多个线程,它的执行力度比进程更加细致,线程资源共享。...
2018-06-28 14:27:23 448
原创 Linux中的进程
进程相关概念一、程序和进程什么是程序?程序是完成特定任务的一系列指令集合什么是进程?从用户的角度来看进程是程序的一次执行过程 从操作系统的核心来看,进程是操作系统分配的内存、CPU时间片等资源的基本单位 进程是资源分配的最小单位 每一个进程都有自己独立的地址空间与执行状态像UNIX这样的多任务操作系统能够让许多程序同时运行,每一个运行着的程序就构成了一个进程进程和程...
2018-06-28 11:01:14 482 1
原创 数组和链表描述栈以及应用
数组描述栈#pragma warning(disable:4996)#include <iostream>#include<iterator>#include<algorithm>using namespace std;//边长一维数组(增加或减少)//改变一个一维数组的长度template<class T>void changeL...
2018-06-22 10:02:42 383
原创 数组和链表描述线性表
数组描述线性表#pragma warning(disable:4996)#include <iostream>#include<iterator>#include<algorithm>using namespace std;//边长一维数组(增加或减少)//改变一个一维数组的长度template<class T>void change...
2018-06-21 19:29:45 513
原创 socket中的epoll及I/O复用总结
select的限制1.一个进程能打开的最大文件描述符是有限的2.FD_SETSIZE(fd_set)限制,select内部使用一个数据结构fd_set,它的容量最大不能超过FD_SETSIZE。poll的限制一个进程能打开的最大文件描述符是有限的上面的进程能打开的最大文件描述符的个数可通过命令ulimit -n number更改,但也不是无限大,还受到系统所能打开的最大文件描述...
2018-06-12 20:20:36 2804
原创 管道和FIFO
1.管道的概念本质: 内核缓冲区 伪文件 - 不占用磁盘空间特点:两部分:读端,写端,对应两个文件描述符 数据写端流入, 读端流出 操作管道的进程被销毁之后,管道自动被释放了 管道默认是阻塞的,读写两端都是2.管道的原理内部实现方式:环形队列特点:先进先出缓冲区大小:默认4k,根据命令ulimit -p查看大小会根据实际情况做适当调整3. 管道的局...
2018-06-06 15:57:06 514
原创 互斥锁、条件变量、读写锁、信号量、自旋锁、递归锁
互斥锁互斥锁指代相互排斥,它是最基本的同步方式。互斥锁用于保护临界区,以保证任何时刻只有一个线程在执行其中的代码(假设互斥锁由多个线程共享),或者任何时刻只有一个进程在执行其中的代码。多线程中如果忘记释放锁,可以在异常处理函数中进行释放。1. 互斥锁类型:创建一把锁:pthread_mutex_t mutex;2. 互斥锁的特点:多个线程访问共享数据的时候是串行的3...
2018-06-06 10:33:21 1274 1
原创 POSIX共享内存
阅读之前请先参考先前的一篇关于共享内存的详细介绍点击打开链接shm_open 函数功能:用来创建或打开一个共享内存对象原型:int shm_open(const char* name,int oflag,mode_t mode);参数: name:共享内存对象的名字 oflag:与open 函数类似,可以是O_RDONLY,O_RDWR,还可以按位或上O_CREAT,O_EXCL,O_...
2018-06-01 20:19:33 369
原创 posix消息队列
posix和System V历史 UNIX两大贡献者贝尔实验室和BSD,在进程之间通信侧重不同,前者基于内核对进程之间的通信手段进行了改进,形成了“System V IPC”,而后者则是基于网络形成了套接字。 而POSIX则是IEEE制定的标准,目的是为运行在不同操作系统上的软件提供统一的接口,实现者则是不同的操作系统内核开发人员。说明 在信...
2018-06-01 16:51:57 357
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人