linux
文章平均质量分 88
月半木斤
这个作者很懒,什么都没留下…
展开
-
【网络】多路转接模型epoll
epoll-迄今为止,linux平台性能最好的IO多路转接模型。没有之一。原创 2022-08-17 09:01:10 · 761 阅读 · 1 评论 -
【网络】多路转接模型-poll
关于多路转接IO poll的介绍。原创 2022-08-17 08:50:42 · 668 阅读 · 0 评论 -
【网络】五种IO模型以及select编程详讲
对于处理高并发场景应用的select多路转接IO的详细解析,帮你迈出网络编程最重要一步。原创 2022-08-13 22:41:51 · 1417 阅读 · 2 评论 -
Linux线程安全之---信号量
目录1.信号量:1.1、信号量的原理1.2、信号量的接口1.2.1、初始化接口:1.2.2、等待接口:1.2.3、释放接口:1.2.4、销毁接口:2.生产者与消费者信号量代码实现:3.线程池:3.1、应用场景3.2、原理:3.3、构造线程池要完成的事情3.4、代码实现4.读写锁4.1、应用场景:4.2、读写锁的三种状态4.3、读写锁的接口:面试题:1.信号量: 1.1、信号量的原理 资源计数器+PCB等待队列原创 2022-05-14 22:02:24 · 1338 阅读 · 0 评论 -
Linux线程安全篇之---生产者与消费者模型(大厂业务必备知识)
目录1.生产者和消费者模型:1.1、123规则:1.2、应用场景:1.3、优点:1.4、代码模拟:1.生产者和消费者模型:1.1、123规则:1.个线程安全的队列:只要保证先进先出的特性的数据结构就都可以称为队列 这个队列要保证互斥(就是保证当前只有一个线程可以对他进行操作,其他线程不可以同时来操作)还要保证同步当生产者将队列中填充满了之后要通知消费者来进行消费,消费者消费之后通知生产者来生产 2.中角色的线程:生产者和消费者(生产者往队列中生产,消费者从队列中拿内容原创 2022-05-17 07:45:00 · 386 阅读 · 1 评论 -
linux线程安全篇之----死锁问题
目录1.死锁问题1.1、死锁的两种场景第一种场景第二种场景2.造成死锁的必要条件2.1、不可剥夺2.2、循环等待2.3、互斥条件2.4、请求与保持3.预防死锁3.1.破坏必要条件:循环等得请求与保持3.2、避免锁没有被释放3.3、资源一次性分配1.死锁问题1.1、死锁的两种场景 第一种场景 线程加锁之后并没有将锁释放 1.这里我们模拟两个线程导致死锁的情况:将锁锁上之后线程退出,导致其他线程拿不到这把锁造成死锁情况原创 2022-05-16 07:30:00 · 1148 阅读 · 0 评论 -
linux线程安全篇之----同步
目录1.同步1.1、有了互斥还为什么要有同步?2.条件变量(实现同步的工具)2.1、条件变量的使用原理:2.2、条件变量的原理3.条件变量接口3.1、初始化接口:3.2、等待接口:3.3、唤醒接口:4.条件变量夺命连环追问4.1、条件变量的等待接口第二个参数为什么会有互斥锁?4.2、那么条件变量等待接口是先让线程入等待队列呢?还是先解锁呢?4.3、线程被唤醒之后会执行什么代码,为什么需要获取互斥锁?1.同步1.1、有了互斥还为什么要有同步?原创 2022-05-15 07:30:00 · 224 阅读 · 0 评论 -
linux线程安全篇之----互斥
目录1.多线程造成的安全隐患:2.互斥2.1互斥:2.1.1互斥概念2.1.2互斥锁:2.1.3互斥锁的计数器当中如何保证原子性3.互斥锁的接口3.1.初始化互斥锁的接口3.1.1动态初始化:3.1.2静态初始化(直接用宏来初始化互斥锁):3.2.加锁接口3.3.解锁接口3.4.销毁接口1.多线程造成的安全隐患:2.互斥 2.1互斥: 2.1.1互斥概念 互斥的要做的事情:控制线程的访问时序。 当多 个线程..原创 2022-05-14 21:35:41 · 1026 阅读 · 0 评论 -
初识线程安全有这一篇就够了
1.多线程造成的安全隐患:2.同步与互斥 2.1互斥: 2.1.1互斥概念 互斥的要做的事情:控制线程的访问时序。 当多 个线程能够同时访问到临界资源的时候,有 可能会导致线程执行的结果产生二义性。而互斥就是要保证多个线程在访问同一个临界资源,执行临界区代码的时候 (非原子性性操作(线程可以被打断) ),控制访问时序。让一个线程独占临界资源执行完,再让另外一个独占执行; 2.1.2互斥锁: 互斥锁的原理 互斥 锁的本质就是0/1计数器,计 数器的取值只能为原创 2022-04-21 20:11:19 · 829 阅读 · 2 评论 -
多线程概念和线程接口
目录1.线程概念1.1进程和线程的关系(工厂和流水线的关系)1.2pid本质上是轻量级进程id,换句话说,就是线程ID1.3 linux内核是如何创建一个线程的呢?1.4线程的共享与独有独有:1.5线程的优缺点:(重中之重)2.线程控制2.1线程创建2.2线程终止2.3线程等待2.4线程分离1.线程概念 1.1进程和线程的关系(工厂和流水线的关系) 结论1 :线程是依附于进程才能存在的,如果没有 进程,则线程不会单独存在 结论2 :多线程的是原创 2022-04-14 18:52:58 · 2017 阅读 · 5 评论 -
深度解析linux下信号的注册和注销原理详解及配合信号更好解决僵尸进程
1.信号的概念:信号是一个软中断 软中断: 例如:看到绿灯你可以选择走或选择不走。红绿灯只是一个提醒你可以选择走或不走 1.1只是告诉有这样一个信号,但是具体这个信号怎么处理,什么时候处理由进程决定,所以是软中断。 2.信号的产生 2.1硬件产生(按键盘中的按键): ctrl+c:2号信号 SIGINT,按下ctrl+c其实是进程收到了2号信号,2号信号导致进程的退出。 ctrl+z :20号信号SIGTSTP, ctrl+|:3号信号SIGQUIT原创 2022-03-27 09:08:48 · 3614 阅读 · 4 评论 -
进程间通信之---消息队列
目录 消息队列 1.消息队列的原理 2.消息队列的接口: 2.1创建消息队列 2.2向消息队列发送消息 2.3接收消息: 2.4操作消息队列的接口 2.5代码测试: 信号量: 信号量的原理 消息队列 1.消息队列的原理 1.1 msgqueue采用链表来实现消息队列, 该链表是由系统内核维护, 1.2 系统中可能有很多的msgqueue, 每个MQ用消息队列描述符(消息队列ID: qid) 来区分,qid是唯一 的,用来区分不同的MQ..原创 2022-03-19 22:58:37 · 3452 阅读 · 7 评论 -
进程间通信之---共享内存
目录 共享内存: 1. 共享内存的原理 2.共享内存的接口 2.1创建或者获取共享内存接口 2.2将共享内存附加到进程的虚拟地址空间 2.3分离 2.4操作共享内存接口 3.共享内存代码 4.共享内存的特性 共享内存: 1. 共享内存的原理 1.1 在物理内存当中开辟一段空间 1.2不同的进程通过页表将物理内存空间映射到自己的进程虚拟地址空间当中 1.3不用的进程通过操作自己进程虚拟地址空间当中的虚拟地址,来操作共享内存 ..原创 2022-03-19 22:24:51 · 1039 阅读 · 6 评论 -
进程间通信之---管道
1.为啥需要进程间通信呢? 1.1原因: 每一个进程的数据都足存储在物理内存当中,进程通过各自的进程虚拟地址空间进行访问,访问的时候,通过各自的页表的映射关系,访问到物理内存。从进程的角度看,每个进程都认为首己拥有4G的空间,至 于物力内存当中属于如何存储,页 表如何映射,进程是不清楚。 这 也造就了进程的独立行。 1.2进程独立性: 好处:让每- -个进程在运行的时候,都是 独立进行运行的,数据不会窜。 坏处:如果两个进程之间需要数据交换,那么由于进程独立行..原创 2022-03-19 21:59:10 · 1547 阅读 · 4 评论 -
Linux下文件系统
数据处理是计算机最主要的功能,显然对于数据的存储也是十分重要的,今天这篇文章将带你简单的了解一下在Linux操作系统下的文件系统是怎样构成的。首先我们先来解释一下bash命令行所显示的内容都是什么意思:...原创 2022-03-19 21:26:51 · 1966 阅读 · 4 评论 -
软硬链接文件
1.软连接:目标文件的快捷方式 就相当于快捷方式: 1.1.生成: 1n -s 源文件 软连接文件 1.2注意事项: 1.修改软连接文件,源文件也会被修改,修改源文件软链接文件也会被修改。 2.源文件如果被删除,软连接文件还在的话, 修改软连接文件,会重新建立源文件,源文件中的内容和修改的软连接内容一样,重新建立链接关系(这种要慎重) 重新建立链接关系 一定在删除源文件的时候,将软链接文件也删除掉(以防后患) ...原创 2022-03-16 22:11:51 · 2621 阅读 · 2 评论 -
静态库&动态库
目录1.1静态库&动态库1.1什么是库:1.2动态库1.2.1特征:1.2.2生成:1.3静态库1.3.1特征:1.3.2生成:1.1静态库&动态库 1.1什么是库: 静态库和动态库都是程序代码的集合。一 般为了方便将程序提供给第三方使用,就是将程序编写成为库文件提供给第三方(用户)使用,那为什么将程序编写成库文件就不会泄漏源码了呢。这是因为将程序编写成库文件就会变成二进制的形式,而二进制的形式十分难破解。 好处: 不会泄漏公原创 2022-03-16 21:31:54 · 1393 阅读 · 3 评论 -
基础-IO
目录1.文件描述符1.1文件描述符就是一个小正数,没有复数1.2文件描述符的分配规则1.3文件描述符在操作系统内核task_struct中是什么2.文件流指针(struct _IO_FILE)3.读写缓冲区的问题4.文件流指针和文件描述符之间的关系5.重定向5.1重定向的符号5.2重定向的接口5.3从内核的角度理解重定向1.文件描述符1.1文件描述符就是一个小正数,没有复数我们通过打开一个文件,然后查看/proc/[pid]/fd文件下.原创 2022-03-16 21:33:15 · 873 阅读 · 3 评论 -
老师教你C语言下文件接口了吗?没教还不进来学
1.fopen: FILE *fopen(const char *path, const char *mode); path :带有路径的文件名称,(如果不带有路径,打开的文件可以是在当前路径下) 返回值: 成功:返回文件流指针 FILE* 失败:返回NULL 文件打开方式 r 只读模式打开 文件流是指向了文件起始位置 如果找不到要打开的文件则报错返回 r+ 以可读可写的方式打开 文件流是指向了文件起始位置..原创 2022-03-16 18:24:47 · 660 阅读 · 0 评论 -
进程程序替换
1为什么要进程替换 因为父进程创建出来的子进程和父进程拥有相同的代码段,所以,子进程看到的代码和父进程是一样的。当我们想要让子进程执行不同的程序时候,就需要让子进程调用进程程序替换的接口,从而让子进程执行不一样的代码 举个实例:像牛客网这些刷题网站他在接收你写的程序时就会创建一个子进程,让子进程去执行你的代码,这样即使你的代码写的有问题那也是子进程崩掉了。 2原理 替换进程的代码段和数据段,更新堆栈。 3 exec函数簇 1. int execl( c...原创 2022-03-15 09:31:20 · 708 阅读 · 4 评论 -
进程控制-解决僵尸进程
1.进程终止 2.1进程终止的场景 代码运行结束,结果正确;好比点外卖,点上了,送来点的外卖。 代码运行结束,结果不正确;好比点外卖,约上了,但是送错了。 代码异常终止;好比点外卖,点都没点上。 2.2正常终止(可以通过“ echo $?查看进程退出码) : 从main函数当中的return返回 并不是所有函数的return都能结束进程,只有main函数的return才能结束进程。 调用exit函数(库函数) 看到函数先man 可.原创 2022-03-15 08:40:30 · 2067 阅读 · 1 评论 -
关于fork函数你不知道的一些小细节
1、fork在创建子进程的时候完成的事情: 1.1创建子进程,子进程拷贝父进程的PCB。 1.2分配新的内存块和内核数据结构(task_ struct) 给子进程 1.3将父进程部分数据结构内容拷贝至子进程, 只是拷贝部分,例如子进程的PID进程号就是自己的,并不是拷贝于父进程。 1.4添加子进程到系统进程列表当中,添加到双向链表当中 1.5fork返回,开始调度器(操作系统开始调度)调度。 2、用户空间&内核空间 我们用...原创 2022-03-13 10:11:53 · 1628 阅读 · 0 评论 -
进程虚拟地址空间
目录1进程虚拟地址空间1.1 C语言当中的程序地址空间图(32位操作 系统为例)2.虚拟地址2.1奇怪的现象:2.2进程虚拟地址空间2.2.1什么是虚拟地址:2.2.2为什么要有虚拟地址空间5.页表5.1、页表是如何工作的5.2如何通过虚拟地址+页表的方式找到具体的物理地址5.3那么fork创建子进程的时候会不会拷贝页表?6、内存空闲问题6.1什么是内存空闲问题6.2.解决办法:离散分配 1进程虚拟地址空间 1.1 C语言当中的原创 2022-03-12 22:46:09 · 1138 阅读 · 3 评论 -
Linux中环境变量
1.什么是环境变量 环境变量是指在操作系统中用来指定操作系统运行的一些参数;换句话说,操作系统通过环境变量来找到运行时的一些资源。 例如: 链接的时候,帮助链接器找到动态库 (标准库的) ; (用户自己编译的动态库需要自己指定环境变量) 执行命令的时候,帮助用户找到该命令在哪一个位置, 例如ls,ldd 2.常见的一些环境变量: 2.1PATH: 指定可执行程序的搜索路径,程序 员执行的命令之所以能找到,这个环境变 量起到的作用(汗马功劳),可...原创 2022-03-12 18:43:31 · 3735 阅读 · 4 评论 -
fork函数创建子进程&僵尸进程&孤儿进程详讲
1、创建子进程 1.1 fork() 首先他是一个系统调用函数 作用:谁调用fork函数,调用成功之后,谁就创建出来一个子进程。 1.2fork()的返回值 创建成功: fork会返回两次在父进程中返回一次,在创建的子进程中返回一次。 >0返回给父进程(返回子进程的pid) ==0返回给子进程 创建失败: 返回-1 1.3、fork的原理 子进程拷贝父进程的PCB 父子进程代码共享(父子进...原创 2022-03-11 19:29:46 · 2965 阅读 · 2 评论 -
进程概念——PCB详讲
1、冯诺依曼体系结构1.1、结构介绍[1] 运算器(cup):cup中央处理器是用于处理算数用算和逻辑用算的,算数用算就是加减乘除运算,而逻辑运算就是与运算,或运算,还有我们语言中的if,for,whle其实都是逻辑运算。[2] 存储器:是内存,并非是磁盘等。所有的数据都是二进制存储的,运算产生的数据都是存储在内存当中。[3] 输入设备:键盘,鼠标,扫描仪,网卡等。[4] 输出设备:屏幕,网卡,打印机等。1.2、那他们之间是怎样工作的呢?例如从输入设备输入一个数.........原创 2022-03-10 22:10:16 · 11458 阅读 · 6 评论 -
Xshell的安装及使用超详细教程
1、Xshell6的安装废话不多说直接上链接:链接:https://pan.baidu.com/s/1WCOxkdhLIZj7yLakWu4Tdw提取码:t3ak2、了解Xshell及其使用2.1、Xshell是什么东西?首先我们要知道Xshell是用来干什么的。Xshell其实就是一个远程终端工具,它可以将你的个人pc(个人电脑)和你在远端的机器连接起来,通过向Xshell输入命令然后他通过网络将命令传送给远端Linux机器然后远端的Linux机器将其运行结果通过网络传回个人电脑。.原创 2022-02-28 22:55:12 · 34283 阅读 · 16 评论 -
Linux下版本管理工具:git的使用(保看保会)
1、克隆仓库1.1命令git clone xxx2、提交到本地仓库2.1、命令git addgit commit -m "log"3、提交到远端仓库3.1、命令git push4、将远端仓库内容更新到自己仓库4.1、命令git pull5、git satus...原创 2022-03-08 11:14:10 · 1383 阅读 · 0 评论 -
Linux下自动构建项目—makefile
1、什么是makefile首先makefile是一个文件,makefile中保存了构建文件所需要的信息。然而仅仅只有这些信息是不足以自动构建一个项目的,它还要配套make命令使用。在外部make命令会根据makefile的文件内容进行解析,编译项目。2、makefile的文件格式目标对象:依赖对象编译命令生成makefile文件后执行make命令就可以看到程序已经编译好了3、make的工作方式3.1、make默认在当前路径下寻找文件名称为“makefi...原创 2022-03-07 12:19:46 · 1552 阅读 · 1 评论 -
linux下vim、gcc、gdb的使用
1、包安装包:yum1.1要安装vim首先我们要知道一个工具yum,yum就是一个应用商店,类似于华为商店,苹果商店等等,里面有经过yum源认证的软件安装包。如果程序员想要那个软件包,就可以使用yum搜索和安装。由于是从yum源下载到本地进行安装,所以必须要有...原创 2022-03-05 23:55:12 · 1692 阅读 · 2 评论