<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[qq_73924465的博客]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/qq_73924465</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; qq_73924465]]></copyright><item><title><![CDATA[RPC入门教学(一) ———— RPC介绍与protobuf的介绍与使用]]></title><link>https://blog.csdn.net/qq_73924465/article/details/144674812</link><guid>https://blog.csdn.net/qq_73924465/article/details/144674812</guid><author>qq_73924465</author><pubDate>Mon, 23 Dec 2024 18:24:48 +0800</pubDate><description><![CDATA[RPC（Remote Procedure Call，远程过程调用）是一种允许程序调用另一台计算机上的子程序或函数的协议，而无需程序员显式地进行底层网络编程。RPC的目标是让开发者在编写分布式应用时，可以像调用本地函数一样简单地调用远程服务，隐藏了网络通信的复杂性。gRPC（Google Remote Procedure Call）是Google开发的一个高性能、开源和通用的远程过程调用（RPC）框架。它旨在使客户端能够像调用本地对象一样轻松地调用不同服务器上的远程服务，从而简化分布式应用和服务的构建。]]></description><category></category></item><item><title><![CDATA[go并发编程——如何设计一个协程安全的数据结构]]></title><link>https://blog.csdn.net/qq_73924465/article/details/144635049</link><guid>https://blog.csdn.net/qq_73924465/article/details/144635049</guid><author>qq_73924465</author><pubDate>Sat, 21 Dec 2024 20:06:32 +0800</pubDate><description><![CDATA[我们在编写代码的时候常常需要用到数据结构来存储代码，而在并发编程中，这一部分上的代码就会称为我们常常所说的临界区，如何正确的访问临界资源，成为了我们需要考虑的问题之一，而今天我们将通过实现一个协程安全的map来探索我们在并发编程设计时，如何去设计一个协程安全的数据结构在本文中我们主要会使用三种方法来实现这个map,分别是：首先我们来看一下结构体代码:
如上我们实现了一个的结构体,它里面我们利用Channel实现了一个类似于锁的机制，我们通过控制的大小来控制map在同一时间可访问协程的数量，实现了类似于互斥锁]]></description><category></category></item><item><title><![CDATA[c++高级篇(四) ——Linux下IO多路复用之epoll模型]]></title><link>https://blog.csdn.net/qq_73924465/article/details/144296153</link><guid>https://blog.csdn.net/qq_73924465/article/details/144296153</guid><author>qq_73924465</author><pubDate>Fri, 06 Dec 2024 17:00:33 +0800</pubDate><description><![CDATA[在之前我们就已经介绍过了select和poll,在作为io多路复用的最后一个的epoll,我们来总结一下它们之间的区别:a。]]></description><category></category></item><item><title><![CDATA[多线程进阶——线程池的实现]]></title><link>https://blog.csdn.net/qq_73924465/article/details/143217134</link><guid>https://blog.csdn.net/qq_73924465/article/details/143217134</guid><author>qq_73924465</author><pubDate>Thu, 24 Oct 2024 19:16:20 +0800</pubDate><description><![CDATA[池化技术是一种资源管理策略，它通过重复利用已存在的资源来减少资源的消耗，从而提高系统的性能和效率。在计算机编程中，池化技术通常用于管理线程、连接、数据库连接等资源。我们会将可能使用的资源预先创建好，并且将它们创建在一个池中，当需要使用这些资源时，直接从池中获取，使用完毕后再将它们归还到池中，而不是每次都创建和销毁资源。池化技术的引用场景十分广泛,例如线程池、数据库连接池、对象池等，今天我们主要要探讨的就是线程池。]]></description><category></category></item><item><title><![CDATA[多线程拓展—— RAII与 智能指针]]></title><link>https://blog.csdn.net/qq_73924465/article/details/142834174</link><guid>https://blog.csdn.net/qq_73924465/article/details/142834174</guid><author>qq_73924465</author><pubDate>Thu, 10 Oct 2024 22:57:31 +0800</pubDate><description><![CDATA[在前面的章节中，我们介绍了多线程编程中的基本概念，包括线程的创建、同步、互斥等。在锁的介绍那篇文章中我们介绍了锁的包装器与lock_guard,它们都是基于RAII（Resource Acquisition Is Initialization）原则的智能指针。RAII是一种编程范式，它使用对象的生命周期来管理资源的分配和释放。在多线程编程中，RAII可以有效地避免资源泄露和死锁等问题。而这篇文章我们将从RAII开始，探究c++11后内存管理的一些新特性.]]></description><category></category></item><item><title><![CDATA[多线程实践(一)——# 基于多线程实现的并发服务器]]></title><link>https://blog.csdn.net/qq_73924465/article/details/142749041</link><guid>https://blog.csdn.net/qq_73924465/article/details/142749041</guid><author>qq_73924465</author><pubDate>Tue, 08 Oct 2024 00:16:45 +0800</pubDate><description><![CDATA[【代码】多线程实践(一)——# 基于多线程实现的并发服务器。]]></description><category></category></item><item><title><![CDATA[c++进阶篇——初窥多线程(五) 条件变量与信号量]]></title><link>https://blog.csdn.net/qq_73924465/article/details/142730830</link><guid>https://blog.csdn.net/qq_73924465/article/details/142730830</guid><author>qq_73924465</author><pubDate>Sun, 06 Oct 2024 19:35:31 +0800</pubDate><description><![CDATA[条件变量是线程间同步的一种机制，它允许一个或多个线程在某些条件满足时被唤醒，从而继续执行。condition-variable:提供与 std::unique_lock关联的条件变量condition_variable_any:提供与任何锁类型关联的条件变量两者的主要区别在于，condition_variable_any可以凭借来与任何类型的锁一起使用，而condition_variable只能与std::mutex一起使用。]]></description><category></category></item><item><title><![CDATA[c++进阶篇——初窥多线程(四) 线程同步的概念以及锁]]></title><link>https://blog.csdn.net/qq_73924465/article/details/139986902</link><guid>https://blog.csdn.net/qq_73924465/article/details/139986902</guid><author>qq_73924465</author><pubDate>Fri, 04 Oct 2024 12:05:14 +0800</pubDate><description><![CDATA[线程同步是指多个线程在执行过程中，由于共享资源，导致数据不一致的问题。i]]></description><category></category></item><item><title><![CDATA[进程通信——内存映射]]></title><link>https://blog.csdn.net/qq_73924465/article/details/142686273</link><guid>https://blog.csdn.net/qq_73924465/article/details/142686273</guid><author>qq_73924465</author><pubDate>Wed, 02 Oct 2024 22:38:08 +0800</pubDate><description><![CDATA[有关进程的教学部分就以此告一段落，大家如果多其他的部分感兴趣，可以参考我的博客网站。]]></description><category></category></item><item><title><![CDATA[进程通信方式——管道]]></title><link>https://blog.csdn.net/qq_73924465/article/details/142665104</link><guid>https://blog.csdn.net/qq_73924465/article/details/142665104</guid><author>qq_73924465</author><pubDate>Mon, 30 Sep 2024 22:56:10 +0800</pubDate><description><![CDATA[管道是进程间通信的一种方式，它的本质其实是内核中的一块内存(或者说是内核缓冲区),这块区域的数据存储在一个环形队列,不过由于管道使用的是内核里面 的内存，所以我们无法对管道里面的数据进行直接操作，只能在管道的两端读/写数据。]]></description><category></category></item><item><title><![CDATA[go语言后端开发学习(七)——如何在gin框架中集成限流中间件]]></title><link>https://blog.csdn.net/qq_73924465/article/details/142183049</link><guid>https://blog.csdn.net/qq_73924465/article/details/142183049</guid><author>qq_73924465</author><pubDate>Sat, 14 Sep 2024 23:55:17 +0800</pubDate><description><![CDATA[上面就是一些常见的限流策略，虽然说现在限流策略已经不再是单体架构而是迈向分布式，但是万变不离其宗，主要还是基于上面所说的策略进行拓展李文周博客——常用限流策略——漏桶与令牌桶介绍。]]></description><category></category></item><item><title><![CDATA[数学建模赛前备赛——模拟退火算法]]></title><link>https://blog.csdn.net/qq_73924465/article/details/141652873</link><guid>https://blog.csdn.net/qq_73924465/article/details/141652873</guid><author>qq_73924465</author><pubDate>Thu, 29 Aug 2024 00:18:45 +0800</pubDate><description><![CDATA[智能优化算法本质上是一个优化算法,它通过不断优化模型的参数,使得系统表现达到最优，常见的只能优化算法有很多，比如说蚁群算法,遗传算法以及我们今天的主角——模拟退火算法。]]></description><category></category></item><item><title><![CDATA[redis学习笔记 ——redis中的四大特殊数据结构]]></title><link>https://blog.csdn.net/qq_73924465/article/details/141504379</link><guid>https://blog.csdn.net/qq_73924465/article/details/141504379</guid><author>qq_73924465</author><pubDate>Wed, 28 Aug 2024 01:21:07 +0800</pubDate><description><![CDATA[Bitmap(位图)，是一串连续的二进制数组(0和1)，可以通过偏移量(offset)定位元素,通过对最小单位bit进行0|1的设置来表示某个元素的值或者状态，由于 bit 是计算机中最小的单位，使用它进行储存将非常节省空间，特别适合一些数据量大且使用二值统计的场景。Redis HyperLogLog 是用来做基数统计的算法，HyperLogLog 的优点是，在输入元素的数量或者体积非常非常大时，计算基数所需的空间总是固定 的、并且是很小的。]]></description><category></category></item><item><title><![CDATA[redis实战——go-redis的使用与redis基础数据类型的使用场景(二)]]></title><link>https://blog.csdn.net/qq_73924465/article/details/141440383</link><guid>https://blog.csdn.net/qq_73924465/article/details/141440383</guid><author>qq_73924465</author><pubDate>Fri, 23 Aug 2024 17:51:37 +0800</pubDate><description><![CDATA[缓存对象做购物车首先是缓存对象,hash命令中的keyvaluefiled很好的能够对应对象的结构我们可以利用Hash来缓存结构，比如像下面我写了一个json那购物车我们应该怎么做呢？]]></description><category></category></item><item><title><![CDATA[redis实战——go-redis的使用与redis基础数据类型的使用场景(一)]]></title><link>https://blog.csdn.net/qq_73924465/article/details/141370636</link><guid>https://blog.csdn.net/qq_73924465/article/details/141370636</guid><author>qq_73924465</author><pubDate>Thu, 22 Aug 2024 21:21:06 +0800</pubDate><description><![CDATA[在之前的文章我们介绍了redis的五大基础数据结构以及一些操作这些数据结构,而用原生命令在我们日常开发的过程中当然是不可能的，本文我们所要探究的就是如何基于go语言实现对redis数据库的操作以及不同的数据结构所使用的场景。]]></description><category></category></item><item><title><![CDATA[redis学习笔记——redis中的常见数据类型以及相关命令]]></title><link>https://blog.csdn.net/qq_73924465/article/details/141337813</link><guid>https://blog.csdn.net/qq_73924465/article/details/141337813</guid><author>qq_73924465</author><pubDate>Tue, 20 Aug 2024 00:20:40 +0800</pubDate><description><![CDATA[Redis 是一个开源（BSD许可）的，内存中的数据结构存储系统，它可以用作数据库、缓存和消息中间件。它支持多种类型的数据结构，如 字符串（strings）， 散列（hashes）， 列表（lists）， 集合（sets）， 有序集合（sorted sets） 与范围查询， bitmaps， hyperloglogs 和 地理空间（geospatial） 索引半径查询。]]></description><category></category></item><item><title><![CDATA[go语言后端开发学习(六) ——基于雪花算法生成用户ID]]></title><link>https://blog.csdn.net/qq_73924465/article/details/141192807</link><guid>https://blog.csdn.net/qq_73924465/article/details/141192807</guid><author>qq_73924465</author><pubDate>Wed, 14 Aug 2024 17:26:28 +0800</pubDate><description><![CDATA[本文介绍了分布式ID生成中的Snowflake（雪花）算法。为解决用户ID安全性与唯一性问题，Snowflake算法生成的ID具备全局唯一性、递增性、高可用性和高性能性等特点。64位ID由符号位（固定为0）、41位时间戳、10位标识位（含数据中心与机器ID）及12位序列号组成。面对ID重复风险，可通过预分配、动态或统一分配标识位解决。Go语言实现示例展示了如何使用第三方包`sonyflake`生成ID，确保不同节点产生的ID始终唯一。]]></description><category></category></item><item><title><![CDATA[go语言后端开发学习(五)——如何在项目中使用Viper来配置环境]]></title><link>https://blog.csdn.net/qq_73924465/article/details/141125644</link><guid>https://blog.csdn.net/qq_73924465/article/details/141125644</guid><author>qq_73924465</author><pubDate>Tue, 13 Aug 2024 16:27:17 +0800</pubDate><description><![CDATA[Viper 是一个强大的 Go 语言配置管理库，适用于各类应用，包括 Twelve-Factor Apps。相比仅支持 `.ini` 格式的 `go-ini`，Viper 支持更多配置格式如 JSON、TOML、YAML 等]]></description><category></category></item><item><title><![CDATA[go语言后端开发学习(四) —— 在go项目中使用Zap日志库]]></title><link>https://blog.csdn.net/qq_73924465/article/details/141102451</link><guid>https://blog.csdn.net/qq_73924465/article/details/141102451</guid><author>qq_73924465</author><pubDate>Sun, 11 Aug 2024 20:14:32 +0800</pubDate><description><![CDATA[本文详细介绍了如何在Go项目中集成并配置Zap日志库。首先通过`go get -u go.uber.org/zap`命令安装Zap，接着展示了`Logger`与`Sugared Logger`两种日志记录器的基本用法。随后深入探讨了Zap的高级配置，包括如何将日志输出至文件、调整时间格式、记录调用者信息以及日志分割等。最后，文章演示了如何在gin框架中集成Zap，通过自定义中间件实现了日志记录和异常恢复功能。通过这些步骤，读者可以掌握Zap在实际项目中的应用与定制方法]]></description><category></category></item><item><title><![CDATA[c++网络编程实战——开发基于协议的文件传输模块(一)如何实现一个简单的tcp长连接]]></title><link>https://blog.csdn.net/qq_73924465/article/details/140831347</link><guid>https://blog.csdn.net/qq_73924465/article/details/140831347</guid><author>qq_73924465</author><pubDate>Sat, 03 Aug 2024 18:03:41 +0800</pubDate><description><![CDATA[我们知道tcp在建立连接的时候会通过三次握手与四次挥手来建立tcp连接，而服务端与客户端之间的工作流程一般是这样的:它的工作流程如下：1.客户端向服务端发送连接请求2.服务端接收客户端连接请求3.二者之间相互发送报文实现数据的传输4.断开连接这种一完成数据交换就断开连接的通讯方式我们称为tcp的短连接。那么现在问题来了:客户端与服务端连接是需要时间的，同时是否可以立即连接上是不确定的(如果现在服务端可连接的客户端已达到上限)，如果我们希望让客户端与服务端始终保持连接状态，应该怎么办呢?]]></description><category></category></item></channel></rss>