自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 [项目设计] 从零实现的高并发内存池(五)

[项目设计] 从零实现的高并发内存池(五)实际上在使用free去释放内存时,我们是不会去传入申请的内存块的大小,所以这里实现的接口也应该能做到不传入对象的大小也能正常释放内存为了实现在释放对象时不再需要显式传入对象的大小,我们可以通过在 Span 结构中增加一个 _size 成员来实现。每个 Span 管理的内存块被切分成多个对象,而这些对象的大小可能不同。因此,为每个 Span 增加一个_size 成员,用于表示这个 Span 管理的内存块被切分的对象的大小。这样一来,在释放对象时,系统可以通过对象的

2024-03-07 20:22:18 1290 48

原创 [深度学习] 卷积神经网络“卷“在哪里?

卷积(Convolution)是数学和计算机科学中一种重要的操作,常用于信号处理、图像处理、神经网络等领域。在信号处理和图像处理中,卷积用于将两个信号或图像进行融合,生成一个新的输出信号或图像。在神经网络中,卷积层是一种常见的层类型,用于从输入数据中提取特征。

2024-02-18 23:53:57 2575 49

原创 [项目设计] 从零实现的高并发内存池(四)

[项目设计] 从零实现的高并发内存池(四)ThreadCache, CentralCache, 内存分配, 内存释放, 自由链表, 内存回收, 线程安全, 对象大小判断, 对齐方式, Span管理, 映射关系, 页号与Span关系, Span合并, 内存碎片问题, 锁操作, 桶管理, 释放策略, 内存池管理, 页面分配, 页号计算.

2024-03-06 19:10:39 1124 29

原创 [项目设计] 从零实现的高并发内存池(三)

[项目设计] 从零实现的高并发内存池(三)哈希桶结构,Central Cache,Thread Cache,内存块,桶,独立管理,锁机制,桶锁,竞争,Span 结构,双向链表,页,内存分配效率,内存碎片化,Spanlist,双向链表结构,分配操作,释放操作,数组,freelists,对齐映射规则,哈希桶大小,内存块切分

2024-03-05 15:29:33 1479 32

原创 [项目设计] 从零实现的高并发内存池(二)

这个高并发内存池的设计是为了在多线程环境下有效地管理内存分配和回收,避免了频繁的锁竞争,提高了性能。整体框架设计保证了高并发环境下的内存管理效率和线程安全性。每个线程的私有线程缓存减少了锁竞争,而中心缓存的哈希桶结构和页缓存的内存合并机制则进一步减少了锁的争用,提高了整个内存池的并发处理能力。

2024-03-04 13:59:12 1051 28

原创 [项目设计] 从零实现的高并发内存池(一)

池化技术池 是在计算机技术中经常使用的一种设计模式,其内涵在于:将程序中需要经常使用的核心资源先申请出来,放到一个池内,由程序自己管理,这样可以提高资源的使用效率,也可以保证本程序占有的资源数量。经常使用的池技术包括内存池、线程池和连接池等,其中尤以内存池和线程池使用最多。内存池内存池(Memory Pool)是一种动态内存分配与管理技术,旨在优化内存的分配和释放过程,减少内存碎片化,提高程序和操作系统的性能。

2024-03-04 08:15:00 1529 25

原创 [Docker实战] 旭日X3派上Docker Openwrt +Samba 实现局域网NAS && 开启AP模式

[Docker实战] 旭日X3派上Docker Openwrt +Samba 实现局域网NAS && 开启AP模式

2024-02-18 19:31:12 3070 39

原创 【Linux内核】从0开始入门Linux Kernel源码

Linux内核是由林纳斯·托瓦兹(Linus Torvalds)在1991年开始开发的。当时他为了得到一个可以运行UNIX操作系统的个人计算机,开始编写一个操作系统内核,并将其命名为Linux。随后,越来越多的开发者加入到项目中,共同完善和扩展Linux内核。如今,Linux已经成为最流行和广泛使用的开源操作系统内核之一,驱动着许多不同类型的设备和服务器。内核的任务在纯技术层面上,内核是硬件与软件之间的一个中间层。其作用是将应用程序的请求传递给硬件,并充当底层驱动程序,对系统中的各种设备和组件进行寻址。

2024-02-17 11:40:59 1959 20

原创 【Linux学习】线程池

线程池(Thread Pool)是一种管理和重用线程的机制,在多线程编程中,创建和销毁线程是一项开销较大的操作,因为涉及到操作系统的资源管理和线程上下文切换的成本。线程池通过预先创建一组线程并维护它们,可以避免频繁地创建和销毁线程,从而降低了系统的开销。

2024-02-15 17:28:59 1485 16

原创 【Linux学习】生产者-消费者模型

生产者 - 消费者模型( Producer-consumer problem) 是一个非常经典的多线程并发协作的模型。在多线程开发中,为了解决生产者和消费者之间速度不匹配的问题,常常会引入一个缓冲区来平衡生产和消费的速度差异。阻塞队列(Blocking Queue)是一种常用于实现生产者和消费者模型的数据结构缓冲区的作用是暂时存储生产者生产的数据,以便消费者在需要时取出。这样一来,即使生产者的速度比消费者快,生产者也不需要等待消费者立即处理数据,而是可以继续生产新的数据并将其放入缓冲区。同样,如果消费者的

2024-02-14 14:44:01 1490 34

原创 【Linux学习】线程互斥与同步

线程互斥,临界资源,互斥锁,死锁问题,避免死锁,多线程编程,临界线程互斥是一种同步机制,用于控制对共享资源的访问,以确保在任意给定的时刻只有一个线程可以访问该资源。在多线程编程中,当多个线程同时竞争访问某个共享资源时,如果没有适当的同步机制,可能会导致竞争条件和数据不一致性的问题。线程互斥通过引入互斥锁等机制,使得在任意时刻只能有一个线程持有资源的访问权限,从而避免了竞争条件和数据不一致性的发生。进程线程间的互斥相关背景概念多线程执行流共享的资源叫做临界资源。每个线程内部,访问临界资源的代码,就叫做临界区。

2024-02-13 19:04:38 1234 29

原创 【Linux学习】线程详解

【Linux学习】线程详解,在内核中,LWP(轻量级进程)和 struct pthread(线程结构体)是一一对应的关系。在用户层,如果存在多个线程结构体,为了创建一个新线程的开销比创建一个新进程小得多,线程之间的切换也相对较快。线程相比进程占用的资源要少很多,因为线程共享了相同进程的资源,如地址空间、文件等。能够充分利用多处理器系统的并行性,提高程序的并发性能。pthread_t 类型取决于实现。对于Linux目前实现的NPTL实现而言,pthread_t类型的线程ID,本质就是一个进程地址空间上的一个地

2024-02-12 19:42:03 1490 25

原创 【Linux学习】进程信号

当检测到信号的处理动作是自定义时,理论上是可以在内核态执行用户空间的代码的,因为内核态拥有极高的权限。然而,绝对不能采用这样的设计方案。如果允许在内核态直接执行用户空间的代码,用户就有可能在其代码中包含一些非法操作,比如尝试清空数据库等。虽然在用户态时没有足够的权限执行这类敏感操作,但如果在内核态执行这种非法代码,由于内核态权限的高度,这些操作就有可能被成功执行,导致潜在的系统数据损坏或丧失。简而言之,不应该让操作系统直接执行用户提供的代码,因为操作系统无法信任任何用户提供的代码。

2024-01-21 15:45:42 1350 35

原创 【Linux学习】进程间通信

【Linux学习】进程间通信 管道的概念:管道想必大家都不陌生,它是Unix中最古老的进程间通信的形式,允许一个进程的输出成为另一个进程的输入。在操作系统中,管道是一种特殊的文件,常用于在父进程和子进程之间或者在两个独立的进程之间传递数据在命令行中,我们常常用管道连接多个命令,形成了一个数据处理的流水线。

2023-12-20 07:30:00 5390 55

原创 【Linux学习】深入理解动态库与静态库

【Linux学习】深入理解动态库与静态库最终的选择取决于项目的具体需求、开发团队的偏好以及目标平台的要求。在实际开发中,有时候也会选择混合使用,即某些库采用静态链接,而另一些采用动态链接,以充分发挥各自的优势在Linux当中,以.so为后缀的是动态库,以.a为后缀的是静态库。在Windows当中,以.dll为后缀的是动态库,以.lib为后缀的是静态库。

2023-12-13 07:30:00 1225 42

原创 【Linux学习】磁盘结构与寻址原理&EXT2文件系统&inode&软硬链接

【Linux学习】磁盘结构与寻址原理&EXT2文件系统&inode&软硬链接磁盘分区(Disk Partitioning):磁盘分区是将一个物理硬盘分割成若干个逻辑部分的过程。每个分区在逻辑上看起来就像是一个独立的硬盘,有自己的文件系统、目录结构和存储空间。磁盘分区的主要目的是将一个大的硬盘划分成多个小的逻辑单元,这样可以更有效地管理数据和操作系统。每个分区可以被用于不同的目的,例如安装操作系统、存储用户数据、备份等。磁盘通常被称为块设备,一般以扇区为单位,一个扇区的大小通常为512字节。

2023-12-10 08:00:00 1165 35

原创 【Linux学习】文件描述符&重定向&缓冲区

指针,表示要写入的文件的FILE结构,而对应的FILE结构体中存有文件描述符(fd),这个时候fwrite()会底层调用write(fd,.....),来执行操作系统内部的write(),它能找到进程的task_struct,再通过里面的files指针再找到files_struct,而files_struct中的fd_array[fd]便指向打开的文件的file结构体,这时候便内存文件便找到了,也就可以后续操作.例如,在网络通信中,如果无法立即发送所有数据,缓冲区可以保存部分数据,等待合适的时机重新发送。

2023-11-30 19:47:42 1050 42

原创 【Linux学习】基础IO

这些宏定义选项的共同点就是,它们的二进制序列当中有且只有一个比特位是1(O_RDONLY选项的二进制序列为全0,表示O_RDONLY选项为默认选项),且为1的比特位是各不相同的,这样一来,在open函数内部就可以通过使用“与”运算来判断是否设置了某一选项。C 语言标准库的文件 I/O 函数实际上是建立在系统文件 I/O 操作的基础上的。总的来说,C 语言标准库的文件 I/O 函数是建立在系统文件 I/O 操作之上的高级接口,提供了更便捷、抽象的文件操作方式,同时隐藏了底层系统调用的复杂性。

2023-11-26 16:41:10 978 28

原创 【Linux学习】进程替换

同时,由于父子进程的代码是共享的,子进程只能执行父进程的代码块,但是通过进程替换后,我们不仅可以让子进程能够执行父进程的代码块,而且子进程也能够做一些额外的工作,执行一个全新的代码(程序),这样就能实现父子进程做的事情有所差异,大大提高了办事效率,同时也使父子进程的代码彻底分离,但是一般情况下,我们用什么语言写程序,就只能去使用对应语言的接口.如C++就不能直接去调用Python中的库去使用.于是这时候这个时候,我们就可以朝着让不同的程序相互切换的方向思考.运行运行我们编译后的程序,使之变成进程。

2023-11-15 10:15:20 1021 31

原创 【Linux学习】进程等待

2.设置为WUNTRACED时: 挂起调用进程的执行,直到等待集合中的一个进程变成已终止或者被停止 返回的PID 为已终止或被停止子进程的 PID(默认的行为是只返回已终止的子进程.当你想要检査已终止和被停止的子进程时,这个选项会有用)这里我们观察到父进程在等待子进程退出时仍然可以打印出child is running的语句,说明此时父进程并没有处于阻塞等待的状态,最后我们仍然可以观察到子进程被成功回收.,即:该参数传入的地址后,操作系统会顺着地址,更改这个地址对应的值,这里就好像函数返回值一样.

2023-11-03 19:49:56 1568 32

原创 【Linux学习】进程终止

按照正常的退出,此时应该会弹出Hello world,但是由于_exit()的强制终止,使得存在于。可以说exit()是一种对_exit()的包装,其底层仍然会调用在kernel内核的_exit()这些退出码和含义是人为规定的,在不同的情况下可能有不同的一套标准,甚至我们可以自己定义。导致系统崩溃的原因有许多,但本质上都是OS为了防止继续犯下更大的错误,决定让进程崩溃。_exit()是系统专门用于终止进程的接口,使用_exit()会使。,因为调用完main时,会自动将main的返回值当做exit的参数。

2023-10-29 23:35:54 1067 12

原创 【Linux学习】进程优先级&环境变量

cpu资源分配的先后顺序,就是指进程的优先权(priority)优先权高的进程有优先执行权利,配置进程优先权对多任务环境的linux很有用,可以改善系统性能。还可以把进程运行到指定的CPU上,这样一来,把不重要的进程安排到某个CPU,可以大大改善系统整体性能环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但 是照样可以链接成功,生成可执行程序,原因就是有相

2023-10-26 21:15:14 2472 13

原创 【Linux学习】进程状态

进程在Linux系统的调度中,具有不同的状态,下面的状态在kernel源代码里定义:/**/并不意味着进程一定在运行中,它表明进程要么是在运行中要么在运行队列 里。意味着进程在等待事件完成(这里的睡眠有时候也叫做可中断睡眠 (interruptible sleep))。有时候也叫不可中断睡眠状态(uninterruptible sleep),在这个状态的 进程通常会等待IO的结束。可以通过发送 SIGSTOP 信号给进程来停止(T)进程。

2023-10-25 23:53:38 2132 8

原创 【Linux学习】初识进程 | 进程概念

1946年,第一台计算机ENIAC诞生,人类进入计算机时代,后来,美籍匈牙利数学家:冯.诺依曼提出了计算机“存储程序”的计算机设计理念,即将计算机指令进行编码后存储在计算机的存储器中,需要的时候可以顺序地执行程序代码,从而控制计算机运行,这就是冯.诺依曼计算机体系的开端。输入设备,存储器,输出设备,运算器,控制器输入设备:包括键盘, 鼠标,扫描仪, 写板等中央处理器(CPU):含有运算器和控制器等输出设备:显示器,打印机等这里的存储器指的是内存。

2023-10-24 12:44:35 1723 18

2023第六届“泰迪杯”数据分析技能赛B题

2023第六届“泰迪杯”数据分析技能赛B题-企业财务数据分析与造假识别

2023-11-18

2019~2022“泰迪杯”数据分析技能赛A,B题合集

2019~2022“泰迪杯”数据分析技能赛A,B题合集

2023-11-14

2023第六届“泰迪杯”数据分析技能赛A题

2023第六届“泰迪杯”数据分析技能赛A题

2023-11-11

空空如也

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

TA关注的人

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