自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++云备份项目---手把手教你实现

项目名称:云备份系统项目功能:搭建云备份服务器与客户端,客户端程序运行在客户机上自动将指定目录下的文件备份到服务器,并且能够支持浏览器查看与下载,其中下载支持断点续传功能,并且服务器端对备份的文件进行热点管理,将长时间无访问文件进行压缩存储。开发环境:服务器: Ubuntu9.4/ vim、g++(7.3以上)、gdb、makefile客户端: Windows10/ vs2017(以上)技术特点: http 客户端/服务器搭建, json 序列化,文件压缩,热点管理,断点续传,线程池,

2024-11-26 23:56:26 782

原创 Ubuntu下Xshell连接腾讯云服务器

1.在腾讯云上买好服务器后,找到控制台,找到自己的服务器重置密码,默认用户名时ubuntu。添加好了之后,就按照上面连接Xshell的方法把用户名改了就行。然后出现一个秘钥接受,直接接受就好了,然后就出现下面。下面就是直接让你设置普通用户的密码了。2.在Xshell连接服务器。useradd 用户名。userdel 用户名。查看当前服务器的用户。

2024-11-14 20:34:18 387

原创 智能指针的原理和使用

下面我们先分析一下下面这段程序有没有什么内存方面的问题?上面的问题分析出来我们发现有什么问题?不管是哪里抛异常都会导致内存泄漏的问题你们是不是想用异常的重新抛出的方法来解决?但是这个有点麻烦,假如有很多要重新抛出,就要写好多次try catch什么是内存泄漏,内存泄漏的危害什么是内存泄漏:内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对该段内存的控制,因而造成了内存的浪费。

2024-11-03 21:06:37 962

原创 【C++11】function包装器和bind的使用

一般而言,我们用它可以把一个原本接收N个参数的函数fn,通过绑定一些参数,返回一个接收M个(M可以大于N,但这么做没什么意义)参数的新函数。C++中的function本质是一个类模板,也是一个包装器。函数指针,仿函数,lambda,如此丰富的类型,可能会导致模板的效率低下,可以统一用function来包装统一类型。象中参数的位置:剩余参数中_1为newCallable的第一个参数,_2为第二个参数,以此类推。arg_list中的参数可能包含形如_n的名字,其中n是一个整数,这些参数是“占位符”,表示。

2024-11-02 11:44:54 408

原创 【C++11】C++线程库和原子性操作库和锁以及条件变量的使用

在C++11之前,涉及到多线程问题,都是和平台相关的,比如windows和linux下各有自己的接口,这使得代码的可移植性比较差。C++11中最重要的特性就是对线程进行支持了,使得C++在并行编程时不需要依赖第三方库,而且在原子操作中还引入了原子类的概念。要使用标准库中的线程,必须包含< thread >头文件。注意:1. 线程是操作系统中的一个概念,线程对象可以关联一个线程,用来控制线程以及获取线程的状态。2. 当创建一个线程对象后,没有提供线程函数,该对象实际没有对应任何线程。

2024-11-02 10:57:40 1224

原创 【高级IO】epoll的惊群效应

epoll惊群效应主要发生在多进程(或多线程)环境中,当多个进程(或线程)同时阻塞等待同一个事件(如客户端连接请求)时,如果事件发生,就会唤醒所有等待的进程(或线程)。然而,由于事件只能被一个进程(或线程)处理,其他进程(或线程)在获取事件失败后会重新进入休眠状态。这种现象不仅浪费了系统资源,还降低了服务器的性能,被称为惊群效应。

2024-10-28 20:26:38 455

原创 【高级IO】IO多路转接之epoll

epoll有2种工作方式水平触发(LT)和边缘触发(ET)水平触发(LT):LT模式是epoll的默认触发模式。在这种模式下,当文件描述符的状态发生变化时,内核会通知用户空间。如果用户空间没有及时处理该事件,内核会继续通知用户空间,直到事件被处理为止。这种模式的优点是编程简单,出错概率较小;缺点是可能会产生多余的通知,降低效率。总结:事件就绪一直通知边缘触发(ET):ET模式是一种高速触发模式,只支持非阻塞socket。在这种模式下,当文件描述符的状态从未就绪变为就绪时,内核会通知用户空间一次。

2024-10-28 20:06:04 816

原创 【高级IO】IO多路转接之poll

fds是一个poll函数监听的结构列表. 每一个元素中, 包含了三部分内容: 文件描述符, 监听的事件集合, 返回的事件集合.nfds表示fds数组的长度.timeout表示poll函数的超时时间, 单位是毫秒(ms).返回值小于0, 表示出错;返回值等于0, 表示poll函数等待超时;

2024-10-28 10:15:40 381

原创 【高级IO】IO多路转接之select

我们知道IO = 等待 + 拷贝,系统提供select函数来实现多路复用输入/输出模型;select系统调用是用来让我们的程序监视多个文件描述符的状态变化的;程序会停在select这里等待,直到被监视的文件描述符有一个或多个发生了状态改变,才进行拷贝。select是负责等待文件描述符就绪的,文件描述符就绪了才交给下面拷贝是需要监视的最大的文件描述符值+11.分别对应于需要检测的可读文件描述符的集合,可写文件描述符的集合及异常文件描述符的集合,2.为结构timeval,用来设置select()的等待时间,

2024-10-26 00:04:22 1114

原创 【高级IO】非阻塞IO

一个文件描述符, 默认都是阻塞IO,通过fcntl把阻塞文件描述符改为非阻塞传入的cmd的值不同, 后面追加的参数也不相同我们此处只是用第三种功能, 获取/设置文件状态标记, 就可以将一个文件描述符设置为非阻塞.

2024-10-25 19:25:57 331

原创 【高级IO】五种IO模型

高效的IO是在单位时间内,等待的比重越小,效率就越高。几乎所有的提高IO效率的策略,本质就是这个

2024-10-25 17:36:10 572

原创 NAT技术和代理服务器

代理服务器(Proxy Server)是一种位于客户端和服务器之间的网络实体。它可以接收客户端的请求,并代表客户端向服务器发起请求,然后将服务器返回的数据转发给客户端。通过这种方式,代理服务器充当了客户端和服务器之间的中介,为客户端提供了访问服务器的间接途径。

2024-10-23 21:13:06 1412

原创 DNS系统和ICMP协议

主域名是用来识别主机名称和主机所属的组织机构的一种分层结构的名称域名使用 . 连接。

2024-10-23 20:28:36 632

原创 【超详细】数据链路层和ARP协议

"以太网" 不是一种具体的网络, 而是一种技术标准; 既包含了数据链路层的内容, 也包含了一些物理层的内容虽然我们在这里介绍ARP协议, 但是需要强调, ARP不是一个单纯的数据链路层的协议, 而是一个介于数据链路层和网络层之间的协议

2024-10-23 20:14:48 808

原创 【超详细】IP协议

前面我们知道传输层的TCP协议是把数据有效可靠的传输出去,那么网络层里的IP协议起什么作用呢?提供一种能为将数据跨网络从A主机送到B主机!

2024-10-23 16:51:33 1603

原创 【超详细】TCP协议

TCP协议是一种面向连接的、可靠的传输层协议,它通过一系列机制来保证数据的可靠传输和连接的稳定性。在实际应用中,TCP协议广泛应用于各种需要确保数据完整性和顺序性的场景中。

2024-10-16 22:12:20 2080

原创 端口号和netstat以及pidof

端口号(Port)标识了一个主机上进行通信的不同的应用程序在TCP/IP协议中, 用这样一个五元组来标识一个通信(可以通过netstat -n查看)执行下面的命令, 可以看到知名端口号1. 一个进程是否可以bind多个端口号?可以2. 一个端口号是否可以被多个进程bind?不可以。

2024-10-14 19:42:03 395

原创 【超详细】UDP协议

用UDP传输100个字节的数据,如果发送端调用一次sendto, 发送100个字节, 那么接收端也必须调用对应的一次recvfrom, 接收100个字节;我们注意到, UDP协议首部中有一个16位的最大长度. 也就是说一个UDP能传输的数据最大长度是64K(包含UDP首部).然而64K在当今的互联网环境下, 是一个非常小的数字.如果我们需要传输的数据超过64k,就需要在应用层手动的分包, 多次发送并在接收端手动拼装(面向数据报)综上所述,UDP协议的应用场景广泛,特别是在需要。UDP传输的过程类似于寄信,

2024-10-14 19:22:15 1328

原创 【超详细】HTTPS协议

HTTPS 也是一个应用层协议. 是在 HTTP 协议的基础上引入了一个加密层.HTTP协议内容都是按照文本的方式明文传输的. 这就导致在传输过程中出现一些被篡改的情况

2024-10-11 16:39:51 1220

原创 【超详细】HTTP协议

虽然我们说, 应用层协议是我们程序猿自己定的。但实际上, 已经有大佬们定义了一些现成的, 又非常好用的应用层协议, 供我们直接参考使用. HTTP(超文本传输协议)就是其中之一

2024-10-11 10:38:41 1140

原创 自定义协议以及序列化和反序列化

json是别人写的第三方库,你要用需要安装,它里面提供了序列化和反序列化的方法,它的使用也是很简单的,怎么用看下面代码的实现。

2024-10-08 11:53:15 1124

原创 【超详细】socket网络编程

本文只介绍基于IPv4的socket网络编程,TCP网络程序,UDP网络程序,干活满满

2024-09-29 21:31:56 1858 3

原创 计算机网络的整体认识---网络协议,网络传输过程

网络协议,网络模型,网络传输过程

2024-09-28 10:49:13 1457 4

原创 【线程】自旋锁和读写锁

以前所讲的是挂起等待锁,申请锁成功继续执行,申请失败挂起等待挂起等待和唤醒是需要时间的,有没有一种锁不会挂起等待呢?那就是自旋锁,申请锁失败它不会挂起,他会轮询,一直让我们的线程申请锁以前用的接口lock就是挂起等待的,而trylock是会立即返回,不会挂起等待,用trylock的时候我们可以用循环来让他轮询一直让我们的线程申请锁然后pthread库也提供了另一种锁的接口是不是发现它也有trylock的版本,是不是有疑问了?

2024-09-25 20:38:23 487

原创 【线程】线程安全的单例模式

IT行业这么火, 涌入的人很多. 俗话说林子大了啥鸟都有. 大佬和菜鸡们两极分化的越来越严重. 为了让菜鸡们不太拖大佬的后腿, 于是大佬们针对一些经典的常见的场景, 给定了一些对应的解决方案, 这个就是设计模式。下面把这一篇文章的线程池改为懒汉模式的单例,改动了构造和析构函数,防止构造出第二个对象,多了一个静态的类的指针成员,来获取这个类。第一次调用 GetInstance 的时候, 如果两个线程同时调用, 可能会创建出两份 T 对象的实例.单例模式是一种 "经典的, 常用的, 常考的" 设计模式.

2024-09-25 19:40:58 614

原创 【线程】线程的封装

C++提供有线程库,他的底层其实也是用原生线程库封装的。下面直接看看C++提供的线程库的基本使用。下面直接进行封装,看看是怎么封装的。

2024-09-25 17:44:03 217

原创 【线程】线程池

线程池是创建出一堆线程,类似于池,创建出线程池,提前创建出一批线程,当有任务的时候,就可以直接交给线程池处理,这样可以很好的提高效率。池化技术,弄一个池,预先弄好资源,当有比如任务来的时候,就交给这个池,就可以很快的处理任务。大家可以拷贝到VS Code下来看。下面利用原生线程库来实现线程池。

2024-09-25 16:57:27 597

原创 【线程】POSIX信号量---基于环形队列的生产消费者模型

POSIX信号量和SystemV信号量作用相同,都是用于同步操作,达到无冲突的访问共享资源目的。 但POSIX可以用于线程间同步

2024-09-25 15:21:06 1072

原创 【线程】线程的同步---生产消费者模型

理解条件变量和生产者消费者模型

2024-09-22 18:51:58 1188

原创 【线程】线程的互斥---互斥锁

多线程执行流共享的资源就叫做临界资源:每个线程内部,访问临界资源的代码,就叫做临界区:任何时刻,互斥保证有且只有一个执行流进入临界区,访问临界资源,通常对临界资源起保护作用:不会被任何调度机制打断的操作,该操作只有两态,要么完成,要么未完成,没有正在做的概念。

2024-09-20 16:33:56 768

原创 【线程】线程的控制

线程的控制:线程的创建,线程的终止,线程的等待,线程的分离,创建多线程

2024-09-18 10:10:03 1312

原创 【线程】线程的概念

计算的是在物理内存的偏移量。用10位比特位说明项目录二级页表表项有1024个,用12位是刚刚好符合物理内存划分为很多个块,每个块是4KB,这样算出的偏移量就不会超过这个大小。其实每个页表里还会有一部分来说明权限其他问题的,我们不说一个进程是不会把进程空间全部用完的,也就是说项目录里的表项没有全部填满,对应的二级页表也就没有1024个,这样页表用的空间就没有那么大int a =10;

2024-09-15 11:18:48 922

原创 【信号】SIGCHLD信号--了解

事实上,由于UNIX 的历史原因,要想不产生僵尸进程还有另外一种办法:父进程调用sigaction(也可以用signal)将SIGCHLD的处理动作置为SIG_IGN,这样fork出来的子进程在终止时会自动清理掉,不会产生僵尸进程,也不会通知父进程。系统默认17号信号的处理动作是忽略动作和用户用sigaction函数自定义的忽略 通常是没有区别的,但这是一个特例。,父进程可以自定义SIGCHLD信号的处理函数,这样父进程只需专心处理自己的工作,不必关心子进程了,子进程终止时会通知父进程,父进程在。

2024-09-13 16:05:09 358

原创 volatile关键字

当进行循环判断以及逻辑反运算时,都需要运算器计算,要被加载到CPU中,优化导致flag变量优化到了CPU的寄存器中,因为优化导致内存不可见,CPU不会从内存读数据,你修改的flag为1,在内存里修改的,对于CPU是不可见的,CPU就认识寄存器中flag,所以就一直死循环。有些编译器在release下,是会对代码自动优化的,而g++编译器是不会自动优化,要带选项。在优化条件下, flag变量可能被直接优化到CPU内的寄存器中。往下翻,-O选项,编译器优化选项,数字代表优化级别。发现进程不会退出了,为什么呢?

2024-09-13 15:11:54 250

原创 可重入函数

main函数调用insert函数向一个链表head中插入节点node1,插入操作分为两步,刚做完第一步的 时候,因为硬件中断使进程切换到内核,再次回用户态之前检查到有信号待处理,于是切换到sighandler函数,sighandler也调用insert函数向同一个链表head中插入节点node2,插入操作的两步都做完之后从sighandler返回内核态,再次回到用户态就从main函数调用的insert函数中继续 往下执行,先前做第一步之后被打断,现在继续做完第二步。2.调用了标准I/O库函数。

2024-09-13 11:38:47 250

原创 ​​【信号】信号的处理

在信号递达时就调用这个函数,这称为。

2024-09-13 11:17:24 1236

原创 【信号】信号的保存

实际执行信号的处理动作称为信号从产生到递达之间的状态,称为。进程可以选择(Block )某个信号。被阻塞的信号产生时将保持在,直到进程对此信号的阻塞,才执行递达的动作.,阻塞和忽略是不同的,只要信号被阻塞就不会递达,而忽略是在递达之后可选的一种处理动作。进程在接收到信号之后,可能不处理,那么信号就会保存,等到合适的时候再进行处理,一般这个信号会保存在一张位图里,这个,比特位的0和1代表信号比特位的位置代表,所谓保存信号就是修改这张位图的内容,OS是进程的管理者,它才有资格修改这张位图的内容。

2024-09-12 19:53:07 985

原创 【信号】信号的产生

就是数组,内容是某个中断号对应方法的地址,CPU拿到中断号,就找到对应的方法,OS就会知道,OS就会实现对应的方法,假如是读取键盘的方法,那么OS就会从键盘读取数据到键盘缓冲区里。我们生活中的红绿灯,闹钟,外面电话等等这些都是信号,我们是怎么认识这些信号的,我们认识这些信号,并且知道这些信号的处理方法,对于进程来说,也会认识相应的信号。给进程设置一个闹钟,时间一到闹钟就响,就会向进程发送14号信号,进程退出,返回值是闹钟的剩余时间,可以不用管。,信号本来是有默认动作的,用了这个函数可以自定义信号的动作。

2024-09-08 20:49:57 969

原创 【进程间通信】System V--消息队列和信号量

里的队列就是数据结构里的队列,A进程通过数据块的形式发送给B进程,B进程也可以通过数据块的形式发送给A进程,这些数据块就在内存中以队列的形式来组织,A,B进程怎么知道哪个是自己的数据块呢?申请资源,本质是对cnt--,P操作,释放资源,本质是cnt++,V操作,申请和释放的PV操作是原子的,原子意思就是要么不做,做就做完,没有正在做的状态,这样的原子性就不会导致上面的问题。当一个执行流申请一个共享资源时,这个计数器就减减,当计数器减到0时,执行流就申请失败临界资源了,计数器资源就是计数器里的资源。

2024-09-08 11:48:41 471

原创 【进程间通信】共享内存

共享内存是内存的一部分,进程间通过共享内存通信首先申请共享内存,然后再把共享内存挂接到自己的进程地址空间(虚拟地址)的共享区,返回首地址。

2024-09-04 17:41:20 228

空空如也

空空如也

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

TA关注的人

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