![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux
赵小厨
C/C++、Qt
展开
-
Linux文件描述符
文件描述符文件描述符是一个非负整数,Linux用文件描述符来标识每个文件对象,当打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符。本篇文章主要围绕下图进行讲解流程首先当有一个进程创建时,操作系统的核心部分kernel会为之创建PCB,PCB中存在文件描述符(file struct),文件描述符前三位分别为三种流(输入、输出、错误),当有新的文件创建时,文件描述符会自动...原创 2019-08-04 23:21:20 · 122 阅读 · 0 评论 -
Linux高并发服务器——select服务器
高并发服务器select服务器属于多路I/O转接服务器的其中一种服务器模型select能监听的文件描述符个数受限于FD_SETSIZE,一般为1024,单纯改变进程打开的文件描述符个数并不能改变select监听文件个数解决1024以下客户端时使用select是很合适的,但如果链接客户端过多,select采用的是轮询模型,会大大降低服务器响应效率,不应在select上投入更多精力多路...原创 2019-08-16 16:20:16 · 1861 阅读 · 0 评论 -
Linux网络编程——网络基础
OSI参考模型与TCP/IP参考模型物理层:指的是电信号的传递方式,比如现在以太网通用的网线链路层:负责网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。网络层:负责点到点的传输(这里的“点”指主机或路由器),Internet上的主机通过IP地址来标识,IP协议是构成Internet的基础。传输层:负责端到端...原创 2019-08-12 17:37:21 · 105 阅读 · 0 评论 -
Linux线程同步(互斥量、信号量、条件变量、生产消费者模型)
为什么要线程同步?线程间有很多共享资源,都对一个共享数据读写操作,线程操作共享资源的先后顺序不确定,可能会造成数据的冲突看一个例子两个线程并行对全局变量count++ (采用一个val值作为中间变量,模拟寄存器工作方式,后面会详解)#include <stdlib.h>#include <pthread.h>#include <unistd.h>...原创 2019-08-15 16:42:54 · 341 阅读 · 0 评论 -
Linux线程池
什么是池?池是一组资源的集合,这组资源在服务器启动之初就被创建并初始化开始处理客户请求的时候,如果它需要相关的资源,就可以直接从池中获取服务器处理完一个客户连接后,可以把相关的资源放回池中为什么要创建线程池?当有客户端连接时,创建耗时为:线程时间+处理时间+销毁线程时间(耗时T1+T2+T3)若需要大量的线程来完成任务,且完成任务的时间比较短,这样花费在T1和T3上面的时间比较...原创 2019-08-20 17:31:47 · 156 阅读 · 0 评论 -
Linux进程间通信——消息队列
概念什么是消息队列?消息队列亦称报文队列,也叫做信箱。是Linux的一种通信机制,这种通信机制传递的数据具有某种结构,而不是简单的字节流。消息队列的本质其实是一个内核提供的链表,内核基于这个链表,实现了一个数据结构向消息队列中写数据,实际上是向这个数据结构中插入一个新结点;从消息队列汇总读数据,实际上是从这个数据结构中删除一个结点消息队列提供了一个从一个进程向另外一个进程发送一块数据的...原创 2019-08-10 20:39:57 · 375 阅读 · 0 评论 -
Linux进程间通信——内存共享映射
一、概念什么是内存共享映射?将磁盘文件的一部分直接映射到内存中共享内存,就是两个或多个进程都可以访问的同一块内存空间,一个进程对这块空间内容的修改可为其他参与通信的进程所看到的映射种类共享映射(share),内存中数据修改时,磁盘对应也同时修改私有映射(private),内存中数据修改时,磁盘不修改内存共享特点实现进程间通信最简单也是最直接的方法就是共享内存——为参与通信...原创 2019-08-10 16:02:09 · 396 阅读 · 0 评论 -
Linux高并发服务器——epoll服务器
epoll服务器一、概述epoll是Linux下多路复用IO接口select/poll的增强版本epoll能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率select使用轮询来处理,随着监听 fd 数目的增加而降低效率。而epoll只需要监听那些已经准备好的队列集合中的文件描述符,效率较高。二、epoll API头文件 #include <sys/epol...原创 2019-08-19 16:25:18 · 883 阅读 · 0 评论 -
Linux线程
注: 本文章参考其他博客加上自身的理解总结而成一、概念线程定义一个线程指的是进程中一个单一顺序的控制流,也称为轻量进程(LWP)一个进程可以有很多线程,每个线程并行执行不同的任务线程会拥有自己的堆栈(不共享),但是它与同一进程中的多个线程将共享该进程中的全局变量、文件描述符等系统资源进程和线程的区别根本区别:进程是最小的分配资源的单位,线程是最小的执行单位。通信机制:对于不同...原创 2019-08-13 16:59:49 · 106 阅读 · 0 评论 -
Linux进程管理
介绍进程前,我们先来理解一下Linux的虚拟内存虚拟内存(32位)一、程序程序是存放在磁盘文件中的可执行文件,未执行。二、进程程序被执行,运行时被称为进程,代码运行时,所需要的资源会分配到对应的虚拟内存空间中进程默认最大可占用空间为4G,但是并不会给进程分配4G的空间,会根据所占用实际的大小,用多少给多少。每个linux进程都一定有一个唯一的数字标识符,称为进程ID。(一...原创 2019-08-06 19:54:33 · 90 阅读 · 0 评论 -
Linux进程间通信——信号
概念什么是信号?信号是linux系统中一种常用的通信机制,A给B发送信号,B在收到信号之前执行自己的代码,收到信号后,不管执行什么程序,都暂停运行,去处理信号,处理完毕后再继续执行原来的程序,是一种软中断。特点由于信号是通过软件方法实现的,具有很强的延时性,对用户来讲,时间非常短,不易察觉每个进程收到的所有信号,都是由内核负责发送,内核处理与信号相关的事件或者名词产生信号的基...原创 2019-08-08 23:45:54 · 116 阅读 · 0 评论 -
Linux进程间通信——管道
管道什么是管道?一个进程连接到另一个进程的一个数据流称为一个“管道”。匿名管道pipe用于父子间的通信管道最大64K,由环形队列组成需要占用两个文件描述符,分别作为管道读端、写端管道是半双工的,需要确定通信方向父写子读,关闭父读、子写子写父读,关闭子读、父写优点:稳定、经典pipe函数原型头文件:<unistd.h>int pipe(int file_...原创 2019-08-08 16:38:27 · 141 阅读 · 0 评论 -
Linux网络编程——SOCKET
一、预备知识大端模式、小端模式大端字节序(Big Endian):最高有效位存于最低内存地址处,最低有效位存于最高内存处;小端字节序(Little Endian):最高有效位存于最高内存地址,最低有效位存于最低内存处。 网络字节序我们已经知道,内存中的多字节数据相对于内存地址有大端和小端之分,磁盘文件中的多字节数据相对于文件中的偏移地址也有大端小端之分。网络数据流同样有大端小...原创 2019-08-12 22:25:04 · 356 阅读 · 0 评论