![](https://img-blog.csdnimg.cn/20181130113511631.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Linux
文章平均质量分 80
高性能服务器编程 以及 进程线程通信
TheShyclear
欲戴皇冠,必承其重
展开
-
Linux下core文件调试
一:core dumped错误在Linux上编写C/C++程序时,往往会发生如下错误:core dumped#include<iostream>using namespace std;int main(){ int *p; *p = 20;//使用了野指针}对于上述这样的一个小小程序很容易定位到错误的源头,但是对于成百上千行的代码来说定位一...原创 2019-01-23 14:13:15 · 1522 阅读 · 0 评论 -
软链接和硬链接
软链接--符号链接:相当于Windows的快捷方式创建命令:ln -s 文件名 软链接的名字 (ln - link s - soft)特点:软链接的特点 1. 在Linux中 , 软链接文件的颜色为 浅蓝色。 2. 软链接的大小为原文件的文件名的大小,即路径长度。 3. 软链接创建时最好给出原文件的绝对路径。 4. 目录也可以创建软链接,方法同上。 ...原创 2019-01-23 12:19:01 · 209 阅读 · 0 评论 -
查看Linux最大文件描述符数
一:系统 1.系统最大打开文件描述符数: /proc/sys/fs/file-max 2.查看: $ cat /proc/sys/fs/file-max 3.重新设置: ①临时性: $ echo 1000000 > /pro/sys/fs/file-max ②永久性:在配置文件/etc/sysct...转载 2019-01-20 19:52:16 · 5277 阅读 · 0 评论 -
Linux高效事件处理模式:Reactor模式和Proactor模式
一:认识Reactor模式 针对于Reactor这个词翻译成汉语是:反应器,也就是反应器模式,很多地方也把它称之为reactor模式。但是呢这两种叫法都不能很好的让我们来理解,这种模式的真正含义!所以我觉得叫他应答者模式会更好理解一些。也就是说,这个模式就像一个侍卫一样,一直在等待你的召唤(也就是你的守卫精灵)。 并发系统常使用reactor模式,代替常用的多线程处理方式:可以节...转载 2018-12-15 10:49:36 · 1353 阅读 · 0 评论 -
Linux前后台运行命令及切换
一:Linux运行命令 一 后台运行 关闭当前终端也可以运行 ① & 命令:加在最后一个命令的最后,可以把这个命令放在后台执行; ② nohup命令:不挂断的运行命令 nohup ./red.sh & nohup ./text & 二 查看前后台运行进程 提供了两个命令可以使用...原创 2018-12-14 19:37:42 · 3574 阅读 · 0 评论 -
I/O复用 poll的内核源码剖析
一:I/O 复用技术 I/O复用技术是:把我们关注的描述符组成一个描述符表(通常不止一个描述符),调用I/O复用函数(select/poll/epoll),当描述符表中有可进行非阻塞I/O操作的描述符时,复用函数返回;否则阻塞复用函数,直到描述符表中有可进行非阻塞I/O操作的描述符出现时,才能唤醒进程继续执行复用函数;当复用函数正常返回时,就可以知道哪些描述符可进行非阻塞I/O操作。 ...转载 2018-12-14 17:05:32 · 495 阅读 · 0 评论 -
Linux 高性能服务器编程—— I/O复用 epoll
一 内核事件表 epoll不同于select和poll,它是使用一组函数来完成任务;同时,epoll把用户关心的文件描述符上的事件放在内核里的一个事件表中,从而不像select 和 poll每次调用都需要重复传入文件描述符集或事件集。但是epoll需要一个额外的文件描述符来表示内核中的这个事件表。//创建事件表函数#include<sys/epoll.h>int ep...原创 2018-12-09 21:04:03 · 165 阅读 · 0 评论 -
Linux 高性能服务器编程——I/O复用 poll
一:poll系统调用 同select相似,也是在指定时间内轮询一定数量的文件描述符,以测试其中是否有就绪者。二:poll函数 1.函数原型:#include<poll.h>int poll(struct pollfd* fds,nfds_t nfds,int timeout); 2.函数参数: 先来了解一下struct pollfd这个结构体...原创 2018-12-06 17:02:51 · 208 阅读 · 0 评论 -
Linux高性能服务器编程——I/O复用 select
提出背景 不管是多线程,或者多进程,以及线程池,进程池。他们都存在一定的效率问题。1.每个进程或线程只能为一个客户端进行服务,知道该客户端结束。(如果客户端在同一时间的访问数量特别大呢?)2.当客户端发送来数据后,分配线程或进程为其服务完后,就要等待该客户端的下一次数据。(如果该客户端连接成功仅仅发了一次数据呢?) 他们虽然能够进行与客户的交互服务,但是当在规定的时间内...原创 2018-12-03 21:01:04 · 160 阅读 · 0 评论 -
Linux——Json发送数据包
一:介绍 JSON(JavaScript Object Notation)是一种 数据交换格式,我们介绍C++中的使用方法。 使用JsonCpp之前先了解几个主要的类:Json::Value 可以表示库里的所有类型,比如:int string boject,array等 Json::Reader 将Json文件流或字符串流解析到Json::Value,主要通过...原创 2018-12-02 15:12:33 · 1347 阅读 · 0 评论 -
Linux IPC——简单应用 共享内存(Share Memory)
目录 一:共享内存1.1定义1.2优缺点1.2.1 优点1.2.2缺点1.3共享内存结构维护1.4共享内存的通信原理二:相关函数接口2.1 Linux命令2.1.1查看系统中的共享储存段 2.1.2删除系统中的共享储存段 2.2 函数2.2.1shmget()创建共享内存函数2.2.2shmctl()销毁等 函数2.2.3shmat...原创 2018-12-02 11:51:37 · 4027 阅读 · 0 评论 -
IPC——应用三 消息队列
https://blog.csdn.net/genzld原创 2018-12-01 13:42:13 · 136 阅读 · 0 评论 -
Linux高性能服务器编程——进程间 传递文件描述符
问题的提出 一:fork()之后,父进程中打开的文件描述符,在子进程中仍然处于打开状态。所以从父进程——》子进程(传递文件描述符)很方便。值得注意的是传递一个文件描述符并不是传递一个文件描述符的值。 二:那么怎样吧子进程中打开的文件描述符传递给父进程呢?通俗的说:也就是,如何在两个不相干的进程之间传递文件描述符呢?解决方案 在Linux底下,可以利用UNIX域底下的socke...原创 2018-11-30 11:29:28 · 939 阅读 · 3 评论 -
高性能服务器编程——进程池或线程池
前言 一般来说,服务器的硬件资源相对充裕,很多时候都用空间换时间的方法来提高服务器的性能,不惜浪费大量的空间资源来换取服务器的运行效率。池的概念 具体做法:提前申请大量的资源,以备不时之需以及重复使用。这就是池的概念 池其实就是一组资源的集合。 静态资源分配: 这组资源在服务器启动之初,就已经被创建并初始化 动态资源分配: 即由系统实时分配资源。 ...原创 2018-11-28 11:29:16 · 453 阅读 · 0 评论 -
进程控制块——PCB
PCB进程控制块的结构: 进程控制块(PCB)是系统为了管理进程设置的一个专门的数据结构。系统用它来记录进程的外部特征,描述进程的运动变化过程。同时,系统可以利用PCB来管理和控制进程,所以说,PCB是系统感知进程存在的唯一标识。 Linux系统下的PCB包含了很多参数,每个PCB约占1KB的内存空间大小。主要包含的内容:1 进程标识符(唯一) 2 进程的当前状...原创 2018-11-25 10:19:46 · 1162 阅读 · 0 评论 -
TCP的三次握手和四次挥手,以及相关的面试问题详细解释
TCP的首部: TCP数据被封装在一个IP数据报中,下图中显示了TCP首部的数据格式,如果不计任选字段,他通常是20个字节。 TCP段分析:①.16位源和目的端口号: 每个TCP段:都包含 源端 和 目的端 的端口号。(用于寻找发端和收端的应用进程)。更好实现TCP分用和复用;这两个值再加上IP首部中的 源端IP地址 和 目的端IP地址,能唯一确定一个TCP连接...原创 2018-11-16 15:55:12 · 629 阅读 · 0 评论 -
TCP/UDP —— Linux网络编程 API(基础准备)
基础知识: 首先我们来了解Linux网络API: ①socket地址API: socket最开始的含义:一个IP地址和端口对(ip,port)。他唯一的表示了TCP通信的一端。 ②socket基础API: socket主要的API包括创建socket,命名socket,监听socket,接受连接,发起连接,读写数据,获取地址信息,检测带外标记,以及读取和设置sock...原创 2018-11-10 18:17:00 · 673 阅读 · 0 评论 -
多线程基础编程——创建,获取,终止,结束,清理
线程的简单概述线程也叫做轻量进程(Lightweight Process,LWP),是程序执行流的最小单元。 1.根据上面这幅图,说明一个进程的所有信息对于该进程中的线程都是共享的,包括可执行程序的代码,程序的全剧内存和堆内存,栈以及文件描述符。同时线程也包含一些私有信息。线程标识进程有进程ID,线程一样也有自己的ID。但是线程id只有在他所属的进程上下文中才有意义。线程I...原创 2018-11-03 10:37:25 · 172 阅读 · 0 评论 -
IPC——应用二 信号量
一:首先我们先了解几个概念1.临界资源: 同一时间只能被一个进程或者一个线程访问的资源。 2.临界区: 访问临界资源的代码区域。 3.原子操作: 不可被中断的操作,一旦开始执行,只能到其结束。 常见的有P操作,和V操作。 4.进程同步: 指为完成某种任务而建立的两个和多个进程,这些进程在合作的过程中需要协调工作次序进行有序的访问而出现...原创 2018-10-22 20:30:09 · 312 阅读 · 0 评论 -
IPC———应用一 管道(匿名 和 有名)
进程通信之管道(pipe,fifo) 进程通信(IPC Interprocess Communication)的一般目的: 数据传输,通知事件,资源共享,和进程控制。背景 但是对于每个进程而言其所看到的内存资源,就是他所独自占有的,所以进程间通信会比较麻烦。原理 让不同的进程能够看到一份公共的资源。因此资源必须是存放在内核上的,在内核开辟一块缓冲区,进程1把数...原创 2018-10-12 16:05:52 · 357 阅读 · 0 评论 -
Linux --------进程:(一)
fork()函数:一:介绍 fork是在进程管理模块中的一个重要的函数。那么怎样来创建进程呢?①:程序----- (执行)-----》进程 ./main ②:由程序创建进程 pid_t fork(void) 二:函数简介一个现有进程可以调用fork函数创建一个新的进程。 1.描述: 一个现有进程可以调用fork函数创建一个新的进程。 2....原创 2018-09-16 10:11:26 · 285 阅读 · 0 评论 -
Linux——基础概念和命令
Linux文件存储结构: / :(根目录)根目录下的存储结构 /bin :命令对应的可执行文件 /home:(普通用户的家目录)-> username(多个用户) /boot: 系统开机使用的一些镜像文件 /etc:配置目录,操作系统的设置 /dev :外部设备 /innt :临时挂载点 /lib :系统中的库文件 /root:r...原创 2018-07-31 19:32:51 · 1697 阅读 · 1 评论 -
TCP滑动窗口和拥塞控制机制详解
滑动窗口的定义: 1.“窗口”对应的是一段可以被发送的字节序列,其连续的范围称为窗口;2.“滑动”则是指这段“允许发送的范围”是可以随着发送的过程而变化的,方式就是按顺序“滑动”。 滑动窗口的作用: 是一种流量控制方法,该协议允许发送方在停止等待确认前可以连续发送发个分组。由于发送方不必每发送一个分组就停下来等待确认,因此该协议可以加速数据的传输。 在了解具体的例子之前我们先来...转载 2018-12-29 16:10:51 · 10336 阅读 · 2 评论