- 博客(134)
- 收藏
- 关注
原创 Muduo网络库
第一阶段:数据准备阶段 (Waiting for the data to be ready)这个阶段是指数据从网络到达网卡,再经过内核处理,直到**内核缓冲区(TCP 接收缓冲区)**中有足够的数据可读的过程。阻塞 (Blocking):用户线程发起调用后被挂起,什么都不干,直到数据准备好。非阻塞 (Non-blocking):如果数据没准备好,内核立即返回一个错误码(如 EAGAIN 或 EWOULDBLOCK)。用户线程不会被挂起,可以轮询或去做别的事。
2026-02-11 05:24:16
420
原创 4. boost::asio之asio异步读写操作及注意事项
本文介绍boost asio的异步读写操作及注意事项,为保证知识便于读者吸收,仅介绍api使用的代码片段,下一节再编写完整的客户端和服务器程序。所以我们定义一个session类,这个session类表示服务器处理客户端连接的管理类session类定义了一个socket成员变量,负责处理对端的连接读写,封装了Connect函数在写操作前,我们先封装一个Node结构,用来管理要发送和接收的数据,该结构包含数据域首地址,数据的总长度,以及已经处理的长度(已读的长度或者已写的长度)
2026-02-11 05:24:06
445
原创 C++并发编程-9. Actor和CSP设计模式
本文介绍两种并发设计中常用的设计模式,包括Actor和CSP模式。传统的并发设计经常都是通过共享内存加锁保证逻辑安全,这种模式有几个缺点,包括1 频繁加锁影响性能,2 耦合度高。后来大家提出了Actor和CSP设计模式。CSP 是 Communicating Sequential Process 的简称,中文可以叫做通信顺序进程,是一种并发编程模型,是一个很强大的并发数据模型,是上个世纪七十年代提出的,用于描述两个独立的并发实体通过共享的通讯 channel(管道)进行通信的并发模型。相对于Actor模型,
2026-02-11 05:23:57
458
原创 12.王道_其他
测试docker是否安装完成的方法:# 请在root用户下使用 docker run hello-world # 下面是显示的结果 Hello from Docker!
2026-02-11 05:23:19
659
原创 9. 王道_Reactor
无法充分利用多核CPU,不适合执行时间较长的服务10. proactor服务器(前摄器模式、主动器模式,基于异步I/O)
2026-02-11 05:22:51
596
原创 C++ Primer 第12章动态内存
private:/*是元素类型是string的vector容器,并且创建shared_ptr指向这个容器*/public :StrBlob();private :/*是元素类型是string的vector容器,并且创建shared_ptr指向这个容器StrBlob b1;// 创建一个包含3个string的vector对象,并创建一个shared_ptr指向此对象 b1 = b2;
2026-02-10 07:19:15
341
原创 PyQt5快速开发与实战 第3章 QtDesigner
Widget Box:工具箱对象查看器:可以看到主窗口放置的对象列表属性编辑器:可以对窗口,控件,布局的属性进行编辑objectName:控件对象名字geometry:相对坐标系sizePolicy:控件大小策略:如果想让窗口或者空间的大小固定,则可以将这两个属性设置为一样的值信号/槽编辑器资源浏览器:可以为空间添加图片,比如Label,Button的背景图片。
2026-02-10 07:18:10
453
原创 Linux程序设计之文件I/O
第一章:操作系统概论计算机的基本组成这个已经在大三学过,但是<<深入理解计算机系统>>之后再来更新此段内容操作系统的目标、功能、主要特性这个已经在大三学过,但是<<现代操作系统>>和<<<<操作系统概念>>>>之后再来更新此段内容Linux操作系统的发展、启动流程、内存管理、Linux内核. Linux内核存放位置:/usr/src/kernels和/boot. 信号:Linux系统中进程 通信的一
2026-02-10 07:17:52
525
原创 Mysql的安装
1、init.d 目录中存放的是一系列系统服务的管理(启动与停止)脚本。2、用service命令可执行init.d目录中相应服务的脚本。例:执行命令“service resin start”,可启动/etc/init.d/resin脚本3、/etc/init.d是指向/etc/rc.d/init.d的软连接information_schema :记录所有表的元数据信息mysql :记录用户信息performance_schema :性能表。
2026-02-10 07:16:26
441
原创 Shell
a=1;echo $a;unset $aecho $a和echo ${a}后者可以切片。a=1234;read-p提示;read -p “请输入” aprompt的简写-n限制长度;-t限制时间整数2.定义只读变量整数declare -a定义普通数组;查看普通数组;===;定义环境变量。
2026-02-10 07:15:52
589
原创 C语言基础(Linux)
Linuxvim快捷键shift+k:进入函数内部 ;qq返回`shift+n:提示功能Xshell中Ctrl+Tab切换窗口wqa:退出所有窗口。Git(Linux)首先创建一个版本库git init初始化空的 Git 版本库于 /root/My_Repository_Git/.git/使用一些修改文件的操作~~~~~~~~~~~ vim code.txt使用下面两条命令可以创建一个版本git add code.txtgit commit -m “版本1”
2026-02-10 07:14:53
508
原创 Claude code的使用
环境准备得到一个.ps1的文件cmd窗口执行(在有.ps1文件的位置打开)在这里插入图片描述配置环境变量:上面图片的地址:C:\Users:Lenovl.local\bin验证:claude version。
2026-02-02 19:37:17
628
原创 2. 设计模式之结构型模式
外观模式是一种结构型设计模式, 能为程序库、 框架或其他复杂类提供一个简单的接口。如果应用的核心模型能用树状结构表示, 在应用中使用组合模式才有价值。使用它将对象组合成树状结构, 并且能像使用独立对象一样使用它们。
2026-02-01 17:12:03
369
原创 第四章 参数高效微调
用微调,虽然能够帮助大语言模型理解新领域的数据知识,但是其监督微调需要耗费大量的计算资资源。所以为了在资源有限的环境中有效的微调大语言模型,研究参数高效的微调技术显得尤为重要。
2026-01-29 06:28:57
271
原创 第二章 语言模型基础
而 LLaMA 系列虽然起步较晚,但凭借着同样出色的性能以及始终坚持的开源道路,也在 Decoder-only 架构领域占据了一席之地。能力、常识推理能力、数学运算能力、代码生成能力等。值得注意的是,这些新能力并非通过在特定下游任务上通过训练获得,而是随着模型复杂度的提升凭空自然涌现。模型训练数据规模以及参数数量的不断提升,不仅带来了学习能力的稳步增强,还为大模型“解锁”了一系列新的能力 ,例如上下文学习。OpenAI 提出的 GPT 系列、Meta 提出的 LLaMA 系列。
2026-01-18 21:00:32
597
原创 第一章 语言模型基础
历史:规则模式—》统计模型–》神经网络规则模型(ELIZA 时代)的做法: 翻阅语法书 -> 查找“eat”是动词 -> 后面应该接名词 -> 查找食物列表 -> 随机填入“apple”。(即使填入“concrete(混凝土)”符合语法,但没意义)。统计模型(N-gram 时代)的做法: 你完全不懂语法。你只是疯狂翻阅那本巨型账本,查找历史上大家说完 “I like to eat” 之后都接了什么词。
2026-01-18 16:01:21
979
原创 《C++并发编程实战》第6章 设计基于锁的并发数据结构
第三种处理方式是,将std::shared_ptr<>的初始化语句移动到push()的调用处,令队列容器改为存储std::shared_ptr<>,而不再直接存储数据的值。然而,若该觉醒的线程在执行wait_and_pop()时抛出异常(譬如新指针std::shared_ptr<>在构建时就有可能产生异常④),就不会有任何其他线程被唤醒。第二种处理方式是,倘若有异常抛出,则在wait_and_pop()中再次调用notify_one(),从而再唤醒另一线程,让它去获取存储的值。
2026-01-06 20:21:12
532
原创 《C++并发编程实战》第5章 C++内存模型和原子操作
is_lock_free() ,准许使用者判定某一给定类型上的操作是能由原子指令(atomic instruction)直接实现(x.is_lock_free()返回true),还是要借助编译器和程序库的内部锁来实现(x.is_lock_free()返回false)。这一功能可在许多情形中派上大用场,原子操作的关键用途是取代需要互斥的同步方式。但是,假如原子操作本身也在内部使用了互斥,就很可能无法达到所期望的性能提升,而更好的做法是采用基于互斥的方式,该方式更加直观且不易出错。无锁数据结构正属于这种情况
2025-12-23 19:55:03
907
原创 《C++并发编程实战》 第4章 并发操作的同步
两种超时(timeout)机制可供选用:一是迟延超时(duration-based timeout),线程根据指定的时长而继续等待(如30毫秒);处理迟延超时的函数变体以“_for”为后缀,而处理绝对超时的函数变体以“_until”为后缀。三种方式其实代表了 C++ 并发编程中,从 “全自动” 到 “全手动” 的三种不同粒度的控制权。它们的核心目的都是为了获取一个 std::future(未来的结果),但**“谁来执行”以及“如何传递结果”**的方式不同。C++ 并发编程中 “单次消费”与“多次广播”
2025-12-12 19:38:09
613
原创 《C++并发编程实战》 第3章 在线程间共享数据
C++17引入了一个新特性,名为类模板参数推导。于std::lock_guard<>可以直接简化为std::lock_guard guard(some_mutex);
2025-12-05 19:39:28
314
原创 Linux命令行与shell脚本编程大全(第4版) 第二部分shell脚本编程基
{}使用来包含命令的使用方括号浮点数解决方案bash 只支持整数运算的限制。exit 命令允许在脚本结束时指定一个退出状态码:退出状态码最大只能是 255。
2025-11-23 19:47:24
187
原创 《C++并发编程实战》 第2章 线程管控
为什么要用它们而不是直接用 it + n 或 it - it?因为不是所有容器(比如 std::list)都支持 + 或 - 运算符。使用 std::distance 和 std::advance 可以让你的并发算法适用于任何标准容器,增强了代码的通用性。当前线程的ID可以通过调用std::this_thread::get_id()获得。在与线程关联的std::thread对象上调用成员函数get_id()
2025-11-22 19:49:13
361
原创 Linux命令行与shell脚本编程大全(第4版) 第一部分 Linux命令行
Linux 系统可划分为以下 4 部分。 Linux 内核 GNU 工具 图形化桌面环境 应用软件内核主要负责以下 4 种功能。 系统内存管理 软件程序管理 硬件设备管理 文件系统管理。
2025-11-19 19:38:54
979
原创 GPU编程初探
推荐资料:CUDA编程入门PTX (Parallel Thread Execution) 是一种由 NVIDIA 定义的虚拟汇编语言(Virtual Assembly Language)。它不是针对特定硬件芯片的机器码,而是 CUDA 编程模型中的一个中间层表示(Intermediate Representation, IR)。你可以把 PTX 理解为 GPU 世界的 Java 字节码。它是一种标准的、跨代、跨架构的指令集,用于连接 CUDA 编译器和实际的 GPU 硬件。
2025-10-13 17:27:44
506
原创 C++并发编程-24. 几种简单并行算法的实现(for_each,find以及partial_sum)
前文介绍了几种数据划分的方式,包括按照线程数量划分,按照递归方式划分,以及按照任务类型划分等。本文结合之前的划分方式,基于stl的find, for_each以及partial_sum等算法实现并行版本。
2025-09-04 09:43:37
513
原创 C++并发编程-23. 线程间切分任务的方法
我们实现一个函数调用上面的封装快速排序本例中,parallel_quick_sort()函数(19处)把绝大部分功能委托给sorter类(1处),后者通过栈容器管理待排序的数据段(2处),并集中管控多个线程以并发执行任务(3处),从而以便捷的操作方式给出了代码实现。本例中,主要工作由成员函数do_sort()负责(9处),它借标准库的std::partition()函数完成数据分段(10处)。
2025-09-04 08:50:56
728
原创 C++并发编程-19. 利用引用计数实现无锁并发栈
前文我们通过风险指针的方式实现了无锁栈,但是也提出了一些弊端,比如每次pop都要从风险数组中选择一个空闲的节点作为标记。其次删除节点前要遍历风险数组对比节点是否被风险指针所指涉,如果被风险指针指涉则需放入待删列表。最后pop结束时也要回收待删列表中的节点,还要依次将待删列表中的节点和风险数组对比,如果未被风险指针指涉则需删除,否则跳过。但是这种方式多次遍历风险数组,会有性能损耗,我们提出一种新的解决方式,利用引用计数实现无锁并发的栈。在C++并发编程一书中提出了两个计数,一个外部计数,一个内部计数,二者加起
2025-09-03 08:55:32
301
原创 C++并发编程-18. 运用风险指针实现无锁栈(难)
术语“风险指针”是指Maged Michael发明的一种技法, 后来被IBM申请为专利。前文我们设计了无锁并发栈的结构,对于pop操作回收节点采用的是延时删除的策略,即将要删除的节点放入待删除列表中。但是待删列表中的节点可能永远不会被回收,因为每次多个线程pop就不会触发回收待删列表的操作。上一节我们说可以通过执行pop的最后一个线程执行回收,那为了实现这个目的,我们就要换一种思路。
2025-09-02 09:20:15
1019
原创 C++并发编程-18. 线程安全的无锁栈(难)
前文我们通过锁的互斥机制实现了并发安全的栈,队列,查找表,以及链表等结构。接下来本文介绍通过无锁的原子变量的方式实现对应的容器,我们这一篇先从无锁的方式实现栈讲起。
2025-08-29 11:00:22
1064
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅