自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(53)
  • 收藏
  • 关注

原创 linux---------------网络基础概念

独立模式计算机之间相互独立;网络互联多台计算机连接在一起, 完成数据共享局域网 LAN:计算机的数量更多,通过交换机和路由器连接一起广域网 WAN:将远隔千里的计算机都连在一起所谓局域网和广域网只是一个相对的概念比如我们有天朝特色的广域网也可以看做一个比较大的局域网2.初始协议协议是一种规定比如我们打电话来规定电话响的次数来表示不同的涵义计算机之间的传输媒介是光信号和电信号通过频率和强弱来表示0和1这样的信息要想传递各种不同的信息。

2025-09-03 21:48:26 503

原创 linux-----------------锁

本文介绍了死锁的概念与解决方法。死锁是指多个进程因互相占用资源而导致的永久等待状态,其四个必要条件是互斥、请求与保持、不剥夺和循环等待。文中提出了四种避免死锁的方法:1)通过内存地址排序实现锁顺序一致性;2)使用RAII机制控制锁作用域;3)采用原子操作替代锁;4)利用标准库联合锁实现多锁原子化操作。这些方法从不同角度破坏死锁条件,确保线程安全。

2025-08-15 19:57:12 295

原创 linux------------------线程池

什么是设计模式下面我们来封装一下logtest_5_22_epoll/Log.h · liu xi peng/linux---ubuntu系统 - 码云 - 开源中国我这边已经封装好了大家有兴趣的话可以去看一下线程池线程池是一种使用模式。线程过多的话会带来过度开销,进而影响缓存的整体性能,而线程池维护多个线程等待着监督管理者分配可并发执⾏的任务。这避免了在处理短时间任务时创建与销毁线程的 代价。线程池不仅能够保证内核的充分利⽤,还能防⽌过分调度。可⽤线程数量应该取决于可⽤的并 发处理器、处理器内核、内

2025-08-10 10:50:57 859

原创 linux--------------------BlockQueue的生产者消费模型

本文介绍了基于C++实现的阻塞队列(Blocking Queue)生产者-消费者模型。阻塞队列通过互斥锁(pthread_mutex)和条件变量(pthread_cond)实现线程同步,当队列满时阻塞生产者线程,队列空时阻塞消费者线程。文章重点分析了pthread_cond_wait的使用规范,强调其与互斥锁配合使用的重要性,以及"先加锁-检查条件-等待-重新检查"的标准模式。此外还介绍了POSIX信号量的基本操作,包括sem_init、sem_wait和sem_post等函数。通过模板

2025-07-19 19:23:32 792

原创 linux----------------------线程同步与互斥(上)

1-1 进程线程间的互斥相关背景概念临界资源:多线程执行流共享的资源就叫做临界资源临界区:每个线程内部访问临界资源的代码就叫做临界区互斥:任何时刻,互斥保证只有一个执行进入临界区,对临界资源起到保护作用原子性:不会被任何调度打断的操作,只有两种状态一个是完成一个是未完成。

2025-07-12 22:26:11 709

原创 linux---------------进程信号(下)

当前阶段。

2025-07-04 23:04:02 992

原创 linux--------------进程信号(上)

本文从生活和技术角度介绍了信号的概念及其处理机制。信号是进程间通信的一种方式,可分为默认、忽略和自定义三种处理方式。通过Ctrl+C发送SIGINT信号的实例,展示了信号捕捉的实现过程。文章还介绍了通过kill、raise函数产生信号的方法,以及模拟野指针导致的SIGSEGV信号。关键点包括:信号处理是异步的,需提前设置;前台进程才能接收控制键信号;信号编号34以上为实时信号。最后通过代码示例演示了如何自定义信号处理函数。

2025-07-03 21:37:57 817

原创 linux----------------进程VS线程

进程与线程及Linux线程控制 进程是资源分配的基本单位,线程是调度的基本单位。同一进程的线程共享代码段、数据段、文件描述符等资源,但各自拥有独立的栈和寄存器。Linux通过POSIX线程库(pthread)实现线程控制,需链接-lpthread。核心操作包括: 创建线程:pthread_create启动新线程,需指定入口函数及参数; 线程终止:可通过return、pthread_exit或pthread_cancel实现,注意返回值需动态分配以避免栈失效; 线程等待:pthread_join回收线程资源并

2025-06-22 19:27:58 849

原创 linux--------------------线程概念与控制

Linux线程是在进程内部执行的轻量化执行路线,CPU视其PCB更为精简。为解决物理内存碎片化问题,系统采用分页式存储管理,将虚拟内存与物理内存通过页表映射,实现连续逻辑地址到不连续物理页框的转换。物理内存管理以4KB页框为单位,内核使用struct page结构体跟踪各页状态(如PG_locked、PG_uptodate),并通过_mapcount记录引用次数。该结构体仅占40字节,管理4GB内存约消耗40MB空间,平衡了内存利用率与系统开销。页大小(通常4KB-8KB)的选择对减少碎片和优化性能至关重要

2025-06-17 23:16:11 1014

原创 linux------------------------进程间通信(下)

system V共享内存。

2025-06-08 13:08:50 380

原创 linux-------------------------进程间通信(上)

数据传输:一个进程需要把数据传输给另外一个进程资源共享:多个进程可以共享资源通知事件:一个进程需要通知另外多个或者一个进程比如子进程结束时要通知父进程进行回收进程控制:有些进程希望完全控制另⼀个进程的执⾏(如Debug进程),此时控制进程希望能够拦截另⼀个进程的所有陷⼊和异常,并能够及时知道它的状态改变。1-2 进程间通信发展1.管道2.System V进程间通信3.POSIX进程间通信。

2025-06-05 12:51:37 810

原创 linux-----------------库制作与原理(下)

要理解编译链链接的细节,我们不得不了解⼀下ELF⽂件。其实有以下四种⽂件其实都是ELF⽂件:• 可重定位⽂件(Relocatable File) :即 xxx.o ⽂件。包含适合于与其他⽬标⽂件链接来创建可执⾏⽂件或者共享⽬标⽂件的代码和数据。• 可执⾏⽂件(Executable File) :即可执⾏程序。•共享⽬标⽂件(Shared Object File) :即 xxx.so⽂件。• 内核转储(core dumps) ,存放当前进程的执⾏上下⽂,⽤于dump信号触发。

2025-05-18 23:06:12 728

原创 linux-----------------库制作与原理(上)

动态库(Dynamic Library)(也称共享库,Shared Library)是 Linux 系统中一种在程序运行时加载的代码模块,文件扩展名为.so与静态库不同,动态库的代码不会被复制到可执行文件中,而是在程序启动或运行时动态加载到内存中,并被多个程序共享使用。

2025-05-13 09:16:48 984

原创 linux--------------Ext系列⽂件系统(下)

└── symlink.txt -> source.txt # 软链接(inode=1002,数据块存储路径"source.txt")| Inode号(新) | 目录项长度 | 文件名长度 | 文件类型(符号链接) | 文件名(如symlink.txt) || Inode号(与源相同) | 目录项长度 | 文件名长度 | 文件类型 | 文件名(如hardlink.txt) || Inode号(4B) | 目录项长度(2B) | 文件名长度(1B) | 文件类型(1B) | 文件名(变长) |

2025-05-11 11:09:37 970

原创 linux-----------Ext系列⽂件系统(上)

柱⾯是分区的最⼩单位,我们可以利⽤参考柱⾯号码的⽅式来进⾏分区,其本质就是设置每个区的起 始柱⾯和结束柱⾯号码。大家都知道一个扇区是512个字节但是操作系统在读取文件的时候不回去一个扇区一个扇区的去读取这样效率会太低了而这个时候操作系统会以块为单位一块一块的去读取而一个块就等于8个扇区也就是4kb。柱⾯(cylinder),磁头(head),扇区(sector),显然可以定位数据了,这就是数据定位(寻址)⽅ 式之⼀,CHS寻址⽅式。⼀个柱⾯多少个扇区,那么该分区多⼤,其实和解释LBA是多少也就清楚了.

2025-05-10 23:02:33 756

原创 Linux文件操作与I/O全解析:从C接口到系统调用(上)

从C标准库到系统调用,从用户缓冲到内核页缓存,文件操作的不同层级提供了灵活性与性能的取舍平衡。深入理解文件描述符、缓冲机制和重定向原理,是构建高效可靠应用的基石。建议通过。

2025-04-22 09:18:40 843

原创 linux--------------进程控制(下)

创建子进程后,子进程执行的是与父进程相同的程序(但可能执行不同的代码分支)。若子进程想执行一个全新的程序,可通过进程的程序替换来实现。否则,操作系统会根据该参数将子进程的退出信息反馈给父进程。函数时,该进程的用户空间代码和数据会完全被新程序替换,并从新程序的启动例程开始执行。不能简单地当作整型来看待,可将其视为位图,具体细节可参考下面的图片(只研究。:调用立即返回,无论操作是否完成,需通过轮询或事件通知获取结果。并不会创建新进程,因此调用前后该进程的 ID 不会改变。,它可以更灵活地等待指定子进程的结束。

2025-04-08 21:51:58 873

原创 linux--------------进程控制(上)

这⾥看到了三⾏输出,⼀⾏before,两⾏after。当⼀个进程调⽤fork之后,就有两个⼆进制代码相同的进程。所以,fork之前⽗进程独⽴执⾏,fork之后,⽗⼦两个执⾏流分别执⾏。通常,⽗⼦代码共享,⽗⼦再不写⼊时,数据也是共享的,当任意⼀⽅试图写⼊,便以写时拷⻉的⽅ 式各⾃⼀份副本。在linux中fork函数是⾮常重要的函数,它从已存在进程中创建⼀个新进程。新进程为⼦进程,⽽原进 程为⽗进程。进程终⽌的本质是释放系统资源,就是释放进程申请的相关内核数据结构和对应的数据和代码。

2025-03-30 17:31:48 805

原创 linux---------进程概念(完)

进程切换是操作系统实现多任务并发的基石,但其性能开销不可忽视。

2025-03-27 19:05:19 907

原创 linux-------------进程概念(中)

为了弄明⽩正在运⾏的进程是什么意思,我们需要知道进程的不同状态。⼀个进程可以有⼏个状态(在Linux内核⾥,进程有时候也叫做任务)。R运⾏状态(running): 并不意味着进程⼀定在运⾏中,它表明进程要么是在运⾏中要么在运⾏队列⾥。S睡眠状态(sleeping): 意味着进程在等待事件完成(这⾥的睡眠有时候也叫做可中断睡眠D磁盘休眠状态(Disk sleep)有时候也叫不可中断睡眠状态(uninterruptible sleep),在这个状态的进程通常会等待IO的结束。

2025-03-25 21:25:38 1106

原创 linux---------进程概念(上)

我们常见的计算机,笔记本,服务器基本上都要遵守冯诺依曼体系结构截⾄⽬前,我们所认识的计算机,都是由⼀个个的硬件组件组成输⼊单元:包括键盘, ⿏标,扫描仪, 写板等中央处理器(CPU):含有运算器和控制器等输出单元:显⽰器,打印机等关于冯诺依曼,必须强调⼏点:这⾥的存储器指的是内存不考虑缓存情况,这⾥的CPU能且只能对内存进⾏读写,不能访问外设(输⼊或输出设备)外设(输⼊或输出设备)要输⼊或者输出数据,也只能写⼊内存或者从内存中读取。⼀句话,所有设备都只能直接和内存打交道。

2025-03-23 13:52:38 1061

原创 linux-----------------指令下集

name:按文件名查找,支持通配符,例如 find /home/user -name "*.txt" 表示在 /home/user 目录及其子目录中查找所有扩展名为 .txt 的文件。示例:less another_large_file.txt:分页查看 another_large_file.txt 文件的内容,并可进行搜索等操作。-type:按文件类型查找,f 表示普通文件,d 表示目录,例如 find /var -type d 表示在 /var 目录及其子目录中查找所有目录。

2025-03-19 15:30:38 362

原创 linux------------------linux基础指令

Novell发⾏了基于System V Release 4的⾃⼰的UNIX版本UNIXWare,它可以和Novell。1991年,UNIX综合实验室综合了System V Release3,SUN OS和Xenix的所有特点,发⾏了。UNIX系统实验室成为了Novell的UNIX系统⼩组的。两个相互竞争的UNIX使⽤的图形⽤⼾界⾯(⼀个叫Motif,另⼀个叫Openlook),已经。受到另⼀个UNIX的⼩操作系统⸺Minix的启发,该系统是由⼀名叫Andrew S Tanenbaum的教。

2025-03-17 09:59:35 972

原创 c++------------------⼆叉搜索树

只有key作为关键码,结构中只需要存储key即可,关键码即为需要搜索到的值,搜索场景只需要判断 key在不在。key的搜索场景实现的⼆叉树搜索树⽀持增删查,但是不⽀持修改,修改key破坏搜索树结 构了。2:如果树不为空就要根据二叉搜索树的性质来插入比根结点大的右边插入,比根结点小的往根结点右边插入。如果⽀持插⼊相等的值,意味着有多个x存在,⼀般要求查找中序的第⼀个x。1:如果他的左子树不为空,左子树上的所有结点都小于等于根节点上的值。2:如果他的右子树不为空,左子树上的所有结点都大于等于根节点上的值。

2025-03-12 09:48:53 435

原创 c++-------------------智能指针

1.1.智能指针的使⽤场景分析下面程序中我们使用了new了以后,我们也delete了,但是如果抛异常之之后,后面的delete就没有执行,内存就得不到释放就导致了内存泄漏,所以我们需要new以后捕获异常,捕获到异常后delete内存,再把异常抛 出,但是因为new本⾝也可能抛异常,连续的两个new和下⾯的Divide都可能会抛异常,让我们处理起 来很⿇烦。智能指针放到这样的场景⾥⾯就让问题简单多了。2.RAII和智能指针的设计思路。

2025-03-11 13:00:09 475

原创 c++-------------------------------c++11

假设容器为container<T>,empalce还⽀持直接插⼊构造T对象的参数,这样有些场景会更⾼效⼀些,可以直接在容器空间上构造T对象所以建议大家以后可以用emplace接口来替代push和insert接口。这个时候如果我们引用这&是引用不是取地址的这个时候传引用的变量就可以修没有穿引用的就会报错如上图c就报错了不能修改可以理解给const修的变量。可变模板参数的原理类似于模板的原理,就是根据实例化对应的多个函数 ,我们也可以用sizeof来计算参数包中的个数。

2025-03-10 11:19:58 695

原创 c++———————————————c++11

右值对象的资源,⽽不是像拷⻉构造和拷⻉赋值那样去拷⻉资源,从提⾼效率,因为他的资源在函数结束之后本身就是要释放的,竟然要释放不如我们直接给他拿走这样就提高了很大的效率,减少了拷贝构造。左值可以出现赋值符号的左边,也可以出现在赋值符号右边定义时const 修饰符后的左值,不能给他赋值,但是可以取它的地址。下⾯的程序中很好的展⽰了模板和typedef时构成引⽤的引⽤时的引⽤折叠规则,⼤家需要⼀个⼀。意义,因为移动构造和移动赋值的第⼀个参数都是右值引⽤的类型,他的本质是要“窃取”引⽤的。

2025-02-23 15:33:02 712

原创 c++----------------------多态

基类的析构函数为虚函数,此时派⽣类析构函数只要定义,⽆论是否加virtual关键字,都与基类的析 构函数构成重写,虽然基类与派⽣类析构函数名字不同看起来不符合重写的规则,实际上编译器对析 构函数的名称做了特殊处理,编译后析构函数的名称统⼀处理成destructor,所以基类的析构函数加了 vialtual修饰,派⽣类的析构函数就构成重写。虚函数的重写/覆盖:派⽣类中有⼀个跟基类完全相同的虚函数(即派⽣类虚函数与基类虚函数的返回值 类型、函数名字、参数列表完全相同),称派⽣类的虚函数重写了基类的虚函数。

2025-01-24 21:00:59 473

原创 c++-------------------------继承

继承(inheritance)机制是⾯向对象程序设计使代码可以复⽤的最重要的⼿段,它允许我们在保持原有 类特性的基础上进⾏扩展,增加⽅法(成员函数)和属性(成员变量),这样产⽣新的类,称派⽣类。以前我们接触的函数层次的 复⽤,继承是类设计层次的复⽤。在派⽣类的访问⽅式 == Min(成员在基类的访问限定符,继承⽅式),public > protected >基类private成员在派⽣类中是不能被访问,如果基类成员不想在类外直接被访问,但需要在派⽣类。我们来简单的看一下继承的模型。

2025-01-23 20:24:13 323

原创 c++---------------------------模板进阶

模板可以实现一些与类型无关的代码,但是对一些特殊的可能回的得到错误的结构需要特殊处理。必须要和模板函数的基础参数类型完全相同,如果不同编译器可能会报一些奇。注意:浮点数,类对象以及字符串是不可以 作为非类型模板参数的。1.全特化就是全部的参数都确定。1.必须要有一个基础模板。2.2函数模板的特化。后面接一对空的尖括号。2.偏特化和部分特化。

2025-01-22 22:52:22 264

原创 c++---------------stack和queue

大家在学数据结构的时候大部分人都应该学过如果底层的实现stack和queue了把在这里我就不过多介绍不了解的可以看一下我前面的博客,在这里我们就简单的介绍一下stack和queue。下面来看一下stack的模拟实现其实跟在数据结构写的是差不多的。有感兴趣的小伙伴可以参考下面的链接里面可以了解的更详细。下面我们来看一下queue的模拟实现。1.stack的使用和介绍。1.1stack的使用。2.2queue的使用。2.queue的介绍。

2025-01-21 14:56:17 243

原创 c++----------------list

这个list就是双向循环链表在我之前文章讲数据结构的部分也讲过大家有兴趣的可以去看一下。由于这个是我之前在数据结果讲过的内容在这我就不在讲了。大家有兴趣可以看一下下面的链接里面有演示文档。下面我们来说一下list Modifiers。下面我们来说一下list的capacity。下面我们来看一下list'的迭代器。跟vector其实也差不多。

2024-12-31 16:04:58 369

原创 c++----------------vector

其实vector和string是差不多的差不多多了一个参数在构造的时候要制定的熟悉其实就是泛型他同样支持迭代器区间来初始化这个大家可以课下自己去尝试一下如果不太了解可以查阅下面这个参考文献。如果把string容器掌握的差不多的话那么我相信对于vector这个容器也差不多。其他的和string容器其实差不多这里就不多介绍了可以查看我的上一篇文章。下面来了解一下vector的迭代器区间的使用。下面我们来介绍一下vector的空间增长问题。, 获取最后一个数据的下。获取最后一个数据位置的。根据具体的需求定义的。

2024-12-31 00:00:54 829

原创 c++---------------------------string

之前我们还需要去用sizeof现在用了容器我们可以调用容器里面的函数直接使用。的底层很简单,容器遍历实际就是替换为迭代器,这个从汇编层也可以看到。他这个开辟空间就只有第一次是2被增容其他都是1.5扩大这个就是31。这个是用来判断字符串是否为空是返回true,否则返回false。从今天开始我们就开始学c++的容器了就不需要我们造轮子了。这个就很简单了和我们之前写顺序表的时候一样这个就是尾插、的库函数,但是这些库函数与字符串是分离开的,不太符合。结尾的一些字符的集合,为了操作方便,

2024-12-27 13:58:16 650

原创 c++--------------模板初阶

前面我们介绍过函数的重载,但是重载函数的复用率比较低,出现新的类型就需要用户增加对应的函数,那有没有一个比较好的办法呢?答案是有的就是我们这篇文章要讲的内容模板。这里面的typename可以换成class具体两个有什么不同我们后面再讲前面这两个都可以使用,切记但是不能使用struct来替代。巧的是前人早已将树栽好,我们只。1.隐式实例化,让编译器自动推导模板参数的实际类型。如何实现一个通用的交换函数呢。3.1 类模板的定义格式。2.1函数模板的概念。2.2函数模板的格式。2.3函数模板的原理。

2024-12-18 22:06:08 354

原创 c++-------------类和对象(下)

3.引⽤成员变量,const成员变量,没有默认构造的类类型变量,必须放在初始化列表位置进⾏初始化,否则会编译报错。4.C++11⽀持在成员变量声明的位置给缺省值,这个缺省值主要是给没有显⽰在初始化列表初始化的 成员使⽤的。2.每个成员变量在初始化列表中只能出现⼀次,语法理解上初始化列表可以认为是每个成员变量定义初始化的地⽅。5.尽量使⽤初始化列表初始化,因为那些你不在初始化列表初始化的成员也会⾛初始化列表,如这。式,就是初始化列表,初始化列表的使⽤⽅式是以⼀个冒号开始,接着是⼀个以逗号分隔的数据成。

2024-12-15 21:53:27 843

原创 c++-----------------类和对象(中)

析构函数与构造函数功能相反,析构函数不是完成对对象本⾝的销毁,⽐如局部对象是存在栈帧的, 函数结束栈帧销毁,他就释放了,不需要我们管,C++规定对象在销毁时会⾃动调⽤析构函数,成对 象中资源的清理释放⼯作。如果⼀个构造函数的第⼀个参数是⾃⾝类类型的引⽤,且任何额外的参数都有默认值,则此构造函数 也叫做拷⻉构造函数,也就是说拷⻉构造是⼀个特殊的构造函数。.如果没写显示定义拷贝构造,编译器会自动生成拷贝构造,自动生成的拷贝构造对内置类型的成员会完成值拷贝,对自定义的成员变量会调用他的拷贝构造。

2024-12-15 19:51:04 729 1

原创 C++-------------类和对象

在stack类里面外面的可以访问public里面的内容但是不能访问private里面的内用如果不给访问限定符就是默认的private,但是在一个类里面可以访问private的内容。类是对象进⾏⼀种抽象描述,是⼀个模型⼀样的东西,限定了类有哪些成员变量,这些成员变量只 是声明,没有分配空间,⽤类实例化出对象时,才会分配空间。(1)C++⼀种实现封装的⽅式,⽤类将对象的属性与⽅法结合在⼀块,让对象更加完善,通过访问权限 选择性的将其接⼝提供给外部的⽤⼾使⽤。类中的函数称为类的⽅法或。

2024-11-17 19:45:00 1063

原创 c++入门基础后续

引用不是新定义一个变量,而是给变量取了一个新的变量名,编译器不会为他开辟新的空间,而是公用一个变量名,就比如三国演义里,刘备和刘玄德是同一个人一样。缺省参数是指在声明或定义的同时给上指定的一个缺省值,在调用函数是如果没有传指定的实参那么就会用这个缺省值。缺省参数分为全缺省和半缺省。全缺省就是全部形参给缺省值,半缺省就是部分形参给缺省值。函数声明和定义分离时,缺省参数不能在函数声明和定义中同时出现,规定必须函数声明给缺省。带缺省参数的函数调⽤,C++规定必须从左到右依次给实参,不能跳跃给实参。

2024-11-17 15:25:35 329

原创 c++入门基础

namespace本质是定义出⼀个域,这个域跟全局域各⾃独⽴,不同的域可以定义同名变量,所以下 ⾯的rand不在冲突了,项⽬⼯程中多⽂件中定义的同名namespace会认为是⼀个namespace,不会冲突。1983年,Bjarne Stroustrup在C语⾔的基础上添加了⾯向对象编程的特性,设计出了C++语⾔的雏形, 此时的C++已经有了类、封装、继承等核⼼概念,为后来的⾯向对象编程奠定了基础。Input Output Stream 的缩写,是标准的输⼊、输出流库,定义了标准的输⼊、输 出对象。

2024-11-14 09:31:54 964

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除