自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(159)
  • 资源 (3)
  • 收藏
  • 关注

原创 代码随想录 - 链表

链表是一种通过指针串联的线性结构,每一个节点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针),最后一个节点的指针域指向null(空指针的意思)。

2023-08-11 11:21:07 293

原创 代码随想录 - 数组

代码随想录 - 数组。

2023-08-07 21:38:40 385

原创 使用Anaconda3创建pytorch虚拟环境

其中-c pytorch中的c表示channel,即下载渠道,是国外的渠道,所以很有可能会出现安装非常缓慢的情况。利用nvidia-smi命令查找的本机CUDA版本,可以对应在PyTorch这里查找安装对应型号的pytorch包的命令。其中base为Anaconda的默认环境,mypytorch是之前搭建的环境,my2pytorch就是现在搭建出来的pytorch环境。下载完成后,可以在pytorch环境下,同上述输入conda list命令查看安装好包后的所有包的列表。必须要在pytorch环境中输入!

2023-07-26 15:32:04 5788 2

原创 Centos7 扩容(LVM 和非 LVM)

CentOS 系统的磁盘扩容可以分为两种方式:LVM 管理和非 LVM 管理。

2023-07-25 14:22:43 5386

原创 基于Centos 7虚拟机的磁盘操作(添加磁盘、分区、格式分区、挂载)

基于Centos 7虚拟机的磁盘操作(添加磁盘、分区、格式分区、挂载)

2023-07-25 09:54:51 9892 1

原创 Qt第一天:信号和槽

信号槽是Qt中最重要的机制

2023-04-30 22:49:47 166 2

原创 Qt第一天:创建Qt项目

Qt是一个跨平台的C++图形用户界面应用程序框架。

2023-04-30 11:26:01 1018

原创 基于QT的TCP通信实现

基于QT的TCP通信实现

2023-04-29 14:59:37 210

原创 网盘项目 - 通信协议设计

通讯协议设计

2023-04-28 16:20:19 380 3

原创 网盘项目- 客户端服务器搭建

2023-04-28 10:05:05 89

原创 初识STL

STL大体分为六大组件,分别是:容器、算法、迭代器、仿函数、适配器(配接器)、空间配置器。

2023-04-26 13:09:12 426

原创 本地套接字(domain)

本地套接字是一种特殊类型的套接字,和 TCP/UDP 套接字不同。TCP/UDP 即使在本地地址通信,也要走系统网络协议栈,而本地套接字,严格意义上说提供了一种单主机跨进程间调用的手段,减少了协议栈实现的复杂度,效率比 TCP/UDP 套接字都要高许多。本地套接字是 IPC,也就是本地进程间通信的一种实现方式。

2023-04-20 10:56:13 1202

原创 UDP - C/S模型

由于UDP不需要维护连接,程序逻辑简单了很多,但是UDP协议是不可靠的,保证通讯可靠性的机制需要在应用层实现。

2023-04-19 10:49:04 365

原创 TCP和UDP通信对比

TCP: 传输控制协议 安全可靠 丢包重传 面向连接(电话模型) UDP: 用户数据报协议 不安全不可靠 丢包不重传 快 不面向连接(邮件模型)

2023-04-19 10:19:08 596

原创 线程池技术

线程池(thread pool)技术是指能够保证所创建的任一线程都处于繁忙状态,而不需要频繁地为了某一任务而创建和销毁线程,因为系统在创建和销毁线程时所耗费的cpu资源很大。如果任务很多,频率很高,为了单一一个任务而起线程而后销线程,那么这种情况效率相当低下的。线程池技术就是用于解决这样一种应用场景而应运而生的。

2023-04-16 22:11:29 577

原创 epoll 反应堆模型(Libevent库核心思想)

epoll 反应堆模型是从 libevent 库里面抽取的核心代码

2023-04-14 16:16:42 972

原创 epoll进阶

epoll除了提供select/poll那种IO事件的电平触发(Level Triggered)外,还提供了边沿触发(Edge Triggered),这就使得用户空间程序有可能缓存IO状态,减少epoll_wait/epoll_pwait的调用,提高应用程序效率。

2023-04-13 21:09:21 500

原创 多路I/O转接 Epoll

目前epell是linux大规模并发网络程序中的热门首选模型。

2023-04-13 16:32:42 360

原创 多路I/O转接 poll(了解)

poll() 的机制与 select() 类似,与 select() 在本质上没有多大差别,管理多个描述符也是进行轮询,根据描述符的状态进行处理,但是 poll() 没有最大文件描述符数量的限制(但是数量过大后性能也是会下降)。

2023-04-13 15:14:21 706

原创 多路I/O转接服务器

多路IO转接服务器也叫做多任务IO服务器。该类服务器实现的主旨思想是,不再由应用程序自己监视客户端连接,取而代之由内核替应用程序监视文件。

2023-04-09 16:13:35 576

原创 TCP协议二:TCP状态转换(重要)

TCP状态转换图及分析

2023-04-09 15:38:07 1016

原创 多进程并发服务器

多进程并发服务器

2023-04-08 16:25:10 109

原创 多线程并发服务器

多线程并发服务器

2023-04-08 16:24:30 161

原创 错误处理函数(补充:Socket编程)

Socket编程的例子不仅功能简单,而且简单到几乎没有什么错误处理,我们知道,系统调用不能保证每次都成功,必须进行出错处理,这样一方面可以保证程序逻辑正常,另一方面可以迅速得到故障信息。:光标放在函数名称处,vim命令模式下输入2K。

2023-04-08 15:27:16 99

原创 TCP协议一

TCP连接建立断开。包含大家熟知的三次握手和四次握手。

2023-04-08 10:26:58 178

原创 Socket编程

Linux当中的一种文件类型,伪文件,不占用存储空间,可进行IO操作,可间接看做文件描述符使用。

2023-04-06 16:57:45 1252

原创 信号量

由于互斥锁的粒度比较大,如果我们希望在多个线程间对某一对象的部分数据进行共享,使用互斥锁是没有办法实现的,只能将整个数据对象锁住。sem_wait: 1. 信号量大于0,则信号量-- (类比pthread_mutex_lock)但,由于sem_t的实现对用户隐藏,所以所谓的++、--操作只能通过函数来实现,而不能直接++、--符号。sem_post: 将信号量++,同时唤醒阻塞在信号量上的线程 (类比pthread_mutex_unlock)

2023-04-02 17:59:55 707

原创 条件变量

条件变量本身不是锁!但它也可以造成线程阻塞。通常与互斥锁配合使用。给多线程提供一个会合的场所。

2023-04-02 15:57:39 581

原创 线程同步(重点)

线程同步,指一个线程发出某一功能调用时,在没有得到结果之前,该调用不返回。同时其它线程为保证数据一致性,不能调用该功能。

2023-04-01 15:39:14 1800

原创 利用线程属性 / 设置线程的分离状态

属性值不能直接设置,须使用相关函数进行操作,初始化的函数为pthread_attr_init,这个函数必须在pthread_create函数之前调用。之后须用pthread_attr_destroy函数来释放资源。

2023-03-31 23:08:44 258

原创 线程控制原语

编译的时候记得后面-l pthread毕竟第三方库实现。

2023-03-31 12:01:40 263

原创 线程的理解

轻量级的进程,本质仍是进程

2023-03-31 10:25:29 205

原创 守护进程(重点)

守护进程(Daemon Process),也就是通常说的 Daemon 进程(精灵进程),是 Linux 中的后台服务进程。在linux系统中,我们会发现在系统启动的时候有很多的进程就已经开始跑了,也称为服务,这也是我们所说的守护进程。它是一个生存期较长的进程,通常独立于控制终端(无控制终端)并且周期性地执行某种任务或等待处理某些发生的事件。守护进程程序的名称通常以字母“d”结尾:例如,syslogd 就是指管理系统日志的守护进程。守护进程是个特殊的孤儿进程,这种进程脱离终端,为什么要脱离终端呢。

2023-03-30 17:26:43 349

原创 进程组 / 会话 (了解)

也称之为作业。代表一个或多个进程的集合。每个进程都属于一个进程组。当父进程,创建子进程的时候,默认子进程与父进程属于同一进程组。进程组ID==第一个进程ID(组长进程)。所以,组长进程标识:其进程组ID==其进程ID可以使用kill -SIGKILL -进程组ID(负的)来将整个进程组内的进程全部杀死。组长进程可以创建一个进程组,创建该进程组中的进程,然后终止。只要进程组中有一个进程存在,进程组就存在,与组长进程是否终止无关。进程组创建到最后一个进程离开(终止或转移到另一个进程组)。

2023-03-30 15:39:06 322

原创 SIGCHLD信号(重点)

如果我们的子进程先于父进程执行,假如在父进程设置完SIGCHLD的信号捕捉函数之前所有子进程都执行结束了,那么父进程就不会再收到子进程发送的SIGCHLD信号,信号捕捉函数就不会执行,进而回收子进程的系统函数waitpid()就不会被调用,那么就会造成所有的子进程变为僵尸进程。在父进程之前死掉的子进程发送的SIGCHLD信号默认动作为忽略,所以可以将之前先于父进程死掉的子进程回收靠的并不是之前子进程的SIGCHLD信号,而是靠的后来收到的SIGCHLD信号,和waitpid函数.目前有两种方法来进行回收。

2023-03-29 23:38:01 415

原创 信号 捕捉

① sa_handler:指定信号捕捉后的处理函数名(即注册函数)。② sa_mask: 调用信号处理函数时,所要屏蔽的信号集合(信号屏蔽字)。注意:仅在处理函数被调用期间屏蔽生效,是临时性设置。sa_sigaction:当sa_flags被指定为SA_SIGINFO标志时,使用该信号处理程序。sa_restorer:该元素是过时的,不应该使用,POSIX.1标准将不指定该元素。③ sa_flags:通常设置为0,表使用默认属性。oldact:传出参数,旧的处理方式。act:传入参数,新的处理方式。

2023-03-29 20:22:49 308

原创 信号集操作函数

内核通过读取未决信号集来判断信号是否应被处理。信号屏蔽字mask可以影响未决信号集。而我们可以在应用程序中自定义set来改变mask。已达到屏蔽指定信号的目的。更多函数具体使用man ***的方式查看手册自定义信号集 // typedef unsigned long sigset_t;将某个信号集清0 成功:0;失败:-1将某个信号集置1 成功:0;

2023-03-29 16:21:33 786

原创 信号 / kill

每个信号都有两个标志位分别表示阻塞和未决,还有一个函数指针表示处理动作。信号产生时,内核在进程控制块中设置该信号的未决标志,直到信号递达才清除该标志。

2023-03-29 10:35:16 312

原创 共享存储映射 mmap / munmap

存储映射I/O (Memory-mapped I/O) 使一个磁盘文件与存储空间中的一个缓冲区相映射。于是当从缓冲区中取数据,就相当于读文件中的相应字节。于此类似,将数据存入缓冲区,则相应的字节就自动写入文件。这样,就可在不适用read和write函数的情况下,使用地址(指针)完成I/O操作。共享内存可以说是最有用的进程间通信方式,也是最快的IPC形式, 因为进程可以直接读写内存,而不需要任何数据的拷贝。

2023-03-27 16:31:23 861

原创 Linux系统 / 网络编程 整理复习总汇

Linux系统编程/网络编程] 笔记目录。http://Linux系统编程。

2023-03-27 16:04:15 129

Qt入门学习教程文档参考

Qt入门学习教程文档参考

2023-04-30

基于Qt的C++网盘项目

需要C++ 数据库 Qt图形界面开发 socket网络编程基础

2023-04-29

Linux网络编程思维导图完善版

Linux网络编程思维导图完善版

2023-04-15

C++提高编程.pdf

C++提高编程.pdf

2022-04-10

C++核心编程.pdf

C++核心编程.pdf

2022-04-10

C++基础入门.pdf

C++基础入门.pdf

2022-04-10

空空如也

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

TA关注的人

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