Ruka-lu
码龄6年
关注
提问 私信
  • 博客:36,785
    36,785
    总访问量
  • 31
    原创
  • 1,237,766
    排名
  • 12
    粉丝
  • 0
    铁粉
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:广东省
  • 加入CSDN时间: 2019-01-04
博客简介:

weixin_44405652的博客

查看详细资料
个人成就
  • 获得13次点赞
  • 内容获得9次评论
  • 获得70次收藏
创作历程
  • 23篇
    2020年
  • 8篇
    2019年
成就勋章
创作活动更多

如何做好一份技术文档?

无论你是技术大神还是初涉此领域的新手,都欢迎分享你的宝贵经验、独到见解与创新方法,为技术传播之路点亮明灯!

342人参与 去创作
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

线程安全的单例模式

线程安全的单例模式:单例模式:属于创建类型的一种常用的软件设计模式,通过单例模式创建的类在当前进程中只有一个实例,一份资源只能被申请加载一次。如何实现:饿汉模式:资源在程序初始化的时候就去加载,后边使用的时候直接使用,使用会非常流畅,但是有可能会加载上根本用不到的资源,而且程序初始化的时间也会较慢懒汉模式:在进行资源的使用时,缺少这个资源才去加载,程序初始化的速度比较快,但是初次加载某个模块时会比较慢,因为这时候需要加载相应的资源。饿汉模式实现方式:使用static将某成员变量定义为
原创
发布博客 2020.05.15 ·
370 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Linux:线程池 / 及如何创建一个线程池

线程池线程池:通俗一点来说,就是一个有着很多线程的池子,线程数量由线程池的最大线程容量控制。当有需要处理的任务到来时,从线程池中取出一个线程去处理这个任务。应用场景:有大量的数据处理请求,需要执行流并行或并发处理若是每次有一个数据请求的到来需要去创建线程去处理,处理完销毁则会产生风险以及一些不必要的消耗:线程如若不限制线程创建的数量,在峰值压力下,线程创建过多,资源耗尽,有程序崩溃的风险。创建一个线程的时间:线程创建+任务处理+线程销毁,如果任务处理的时间占比不高,则说明大量的资源都用于了线程的
原创
发布博客 2020.05.11 ·
534 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

Linux/多线程的同步与互斥

线程安全:多个执行流对资源进行争抢访问,但不会产生数据二义性线程安全的实现:同步,互斥同步:通过条件判断实现对临界资源访问的合理性互斥:通过同一时间对临界资源的唯一访问,实现对临界资源访问的安全性互斥锁互斥的实现:互斥锁在多任务处理的操作系统中,多个执行流可能同时要使用某个数据,就假如我们现实中有一台打印机,有许多人要使用,如果不加以控制,比如说排队,上一个人还没有使用完下一个人就是用...
原创
发布博客 2020.04.24 ·
329 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

LINUX/ linux操作系统下的多线程/线程控制

线程概念进程中的一条执行流,执行程序中的某段代码功能:进行多任务处理以前学习知道,进程就是pcb,是对正在运行程序的描述,通过pcb操作系统可以实现对程序运行的调度管理。线程是进程中的一条执行流,这个执行流在Linux系统下是通过pcb来调度运行的,在Linux系统下实际上没有线程的概念(即无tcb),实际上Linux系统下线程就是一个pcb,这些pcb共用同一个虚拟地址空间,相较于传统pc...
原创
发布博客 2020.04.21 ·
797 阅读 ·
1 点赞 ·
0 评论 ·
3 收藏

C++关键字:volatile / 函数重入

volatile用于修饰一个变量,保持变量的内存可见性(cpu在处理的时候每次都从内存获取数据),防止编译器过度优化。cpu在处理数据的时候从内存获取数据加载入寄存器进行处理gcc编译器,在编译程序的时候,如果使用代码优化 -Olevel(1,2,3)选项,发现某个变量使用频率非常高,为了提高效率,直接将这个变量的值设置为某个寄存器的值,以后访问这个变量的时候都直接从寄存器访问,则减少了内存...
原创
发布博客 2020.04.14 ·
566 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

LINUX/进程信号相关

进程信号信号:一个软件中断作用:通知进程发生了一个事件,进程中断当前的操作去处理这个事件。生活中的信号多种多样,并且每一个信号都对应一个事件,并且我们可以识别这个信号去处理这个事件操作系统中的信号也是如此,通过kill -l 指令可以查看系统中的信号种类,共有62种信号种类其中1~31号信号是从unix中继承而来的,每个信号都有具体的对应系统事件,属于不可靠信号(有可能信号丢视,造成事...
原创
发布博客 2020.04.13 ·
146 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

LINUX/进程通信:共享内存/消息队列/信号量

共享内存共享内存:是在物理内存上开辟一块空间,需要通信的进程通过页表映射这块物理内存地址到各自的虚拟地址空间上,进而可以通过虚拟地址空间访问这块空间,实现数据共享。特性:共享内存是最快的进程通信方式管道通信:这种通信方式,涉及两次用户态与内核态之间的拷贝,将数据写入管道,再从管道中读取数据。共享内存:直接通过虚拟地址访问物理内存实现对共享内存中数据的操作,相比与管道通信少了两次用户态与内...
原创
发布博客 2020.04.10 ·
191 阅读 ·
0 点赞 ·
0 评论 ·
2 收藏

C++ 构造函数详解

构造函数构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,保证每个数据成员都有一个合适的初始值,并且在对象的生命周期内只调用一次。特性构造函数的名字虽然叫构造,但并不是开空间创建对象,而是对创建的这个对象进行初始化。其特征如下:1:函数名与类名相同2:函数没有返回值3:对象实例化时编译器会自动调用对应的构造函数4:可以重载5.如果类中没有显示定义一个...
原创
发布博客 2020.04.08 ·
309 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

LINUX/进程间通信(IPC):匿名管带/命名管道

进程通信(ipc):操作系统为进程间提供的几种通信方式。由于进程具有独立性,每个进程都拥有自己的独立的虚拟地址空间,因此无法直接通信,才需要操作系统提供的几种通信方式。通信方式:匿名管道/命名管道,共享内存,信号量,消息队列管道本质:内核中的一块缓冲区,多个进程通过访问同一块缓冲区(管道)实现通信。种类:匿名/命名匿名管道内核中的缓冲区没有具体的标识符,因此只能用于具有亲缘关系的...
原创
发布博客 2020.04.06 ·
192 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

C/C++ 关于extern "c"

extern "c"有时候在一个C++工程中某些函数可能要用C语言的风格编译,在函数前加个exetern “c” ,就是告诉编译器将这个函数用C语言的规则进行编译。当我们需要调用一个用C++实现的动态库或者静态库的接口时,如果是一个C++程序我们就可以成功调用,如果是一个C语言程序,就会调用失败,因为C和C++的函数调用规则是不一样的。如果在这个库里的函数使用exetern “c”,那么C和C...
原创
发布博客 2020.04.01 ·
251 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

快速排序及三种排序方法 Hoare法/挖坑法/前后指针法

快速排序算法思想:基于分治的思想,是冒泡排序的改进型。同冒泡排序一样,快速排序也属于交换排序,通过元素之间的比较和交换位置来达到排序的目的。不同的是,冒泡排序在每一轮只把一个元素冒泡到数列的一端,而快速排序在每一轮挑选一个基准元素,并让其他比它大的元素移动到数列一边,比它小的元素移动到数列的另一边,从而把数列拆解成了两个部分。每次把数列分成两部分,究竟有什么好处呢?假如给定8个元素的数列...
原创
发布博客 2020.03.30 ·
409 阅读 ·
0 点赞 ·
1 评论 ·
2 收藏

Linux系统下对进程的控制详解:进程等待/程序替换

进程等待创建出来的子进程如果先于父进程退出,并且父进程没有得到子进程的返回状态,这时子进程就会保存自己的退出原因,使系统资源得不到完全释放从而产生僵尸进程。①如何不产生僵尸进程?父进程等待子进程的退出,获取子进程的返回值,从而避免僵尸进程②关于进程等待有两个函数*1.pid_t wait(int status)阻塞等待任意一个子进程退出,获取子进程的返回值放到status指向的空间中,...
原创
发布博客 2020.03.26 ·
150 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Linux系统下对进程的控制:进程创建/进程终止

进程创建通常情况下使用 pid_t fork(void) 函数创建一个子进程,返回子进程的pid,创建出来的子进程与父进程代码共享,数据独有。写时拷贝技术:子进程复制了父进程,一开始与父进程指向同一块物理内存,因此看起来父子进程完全相同;但是进程间具有独立性,意味着当这块物理内存中的数据即将发生变化时会重新给子进程开辟物理空间,将数据拷贝过来,因此子进程拥有自己独立的数据。代码共享的原因:代...
原创
发布博客 2020.03.23 ·
190 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

进程虚拟地址空间以及三种内存管理方式 分页式/分段式/段页式

平时我们都知道地址,是内存单元的编号,指针则是存储变量地址的变量。那么程序是否会有地址呢?程序是不占用内存的,存储在磁盘中,只有当运行时才会将数据载入内存中。进程的狭义概念是一个正在运行中的程序(进程详解看上一篇博客),因此进程是有地址空间的。进程虚拟地址空间假设现在有一个进程,它有一个变量a=100,此时我们创建一个该进程的子进程,子进程的一个特点是代码共享,数据独有。然后在子进程中修改...
原创
发布博客 2020.03.19 ·
1597 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

LINUX系统下进程的各种状态/僵尸进程/精灵进程

进程在一般情况下会有这三种情况:1.就绪2.运行3.阻塞在Linux下进程状态更加详细:R / 运行状态:就绪以及正在运行S / 可中断休眠状态:可以被一些中断唤醒的休眠状态D / 不可中断休眠状态:不能被中断唤醒的休眠,只能等待条件满足后自动唤醒T / 停止状态:当前不再运行什么都不做Z / 僵尸状态:进程已经退出,但是没有释放系统资源PS:我们可以使用 ps -aux ...
原创
发布博客 2020.03.16 ·
462 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

LINUX/操作系统下的进程相关

进程首先问一个简单的问题,进程是什么?说进程是一个正在运行的程序也没有问题,但是有点狭义。那么程序又是什么呢?程序是一系列有序的指令集和,也就是程序员们所编写的代码,存储在硬盘中,那么运行的话是怎么运行的呢。冯·诺依曼体系结构决定了所有数据指令想要被CPU处理都必须加载入内存。在内存中,对这些指令和数据都有单独的描述,操作系统将这些运行的程序进行描述,然后将这些描述信息组织起来进行管理,...
原创
发布博客 2020.03.12 ·
162 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

【C语言】分隔链表 给定一个头结点为 root 的链表, 编写一个函数以将链表分隔为 k 个连续的部分。

给定一个头结点为 root 的链表, 编写一个函数以将链表分隔为 k 个连续的部分。每部分的长度应该尽可能的相等: 任意两部分的长度差距不能超过 1,也就是说可能有些部分为 null。这k个部分应该按照在链表中出现的顺序进行输出,并且排在前面的部分的长度应该大于或等于后面的长度。返回一个符合上述规则的链表的列表。举例: 1->2->3->4, k = 5 // 5 结果 ...
原创
发布博客 2020.03.11 ·
743 阅读 ·
0 点赞 ·
0 评论 ·
4 收藏

冯·诺依曼硬件体系和操作系统的简单认识

冯·诺依曼硬件体系结构冯·诺依曼是布达佩斯大学数学博士,在现代计算机、博弈论、核武器和生化武器等领域内的科学全才之一,被后人称为“现代计算机之父”、“博弈论之父”。冯诺伊曼硬件体系结构由五个部分组成:输入设备输出设备存储器运算器控制器目前几乎所有的计算机都是以这个体系结构组成。输入设备在我们日常使用中就是键盘,输出设备是显示器终端之类。存储器是计算机的内存,所有设备都围绕内存进...
原创
发布博客 2020.03.09 ·
1119 阅读 ·
0 点赞 ·
0 评论 ·
3 收藏

LINUX系统下的磁盘存储文件机制

在讲LINUX系统下的磁盘对文件进行存储的方式前,我们先用Window系统进行类比,一般在Windows系统下,会将整块磁盘进行磁盘分区,分成若干个磁盘,如图:用户可以将自己的文件放置至任意磁盘分区中进行存储使用。然而,在LINUX系统下磁盘的分区至少分为两块,如下图:Swap分区:在我们平时使用时,每个软件程序的运行都需要内存空间,而当内存空间在使用时被用完时,如果我们还想去运行其他...
原创
发布博客 2020.03.05 ·
820 阅读 ·
0 点赞 ·
0 评论 ·
3 收藏

链表简单教程

一·链表的概念及结构链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的 。其物理结构和逻辑结构如下图:物理结构逻辑结构由上图可以看出链表是多个结点链接起来进行存储数据的一种数据结构,其中一个结点分别由两个域组成:数据域和指针域。数据域:进行存储数据指针域:存储后继节点在内存中的地址,这个地址就是下一个节点的起始地址由物理结构图也...
原创
发布博客 2020.02.14 ·
574 阅读 ·
0 点赞 ·
0 评论 ·
3 收藏
加载更多