<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[个人独立博客http://www.acb0y.cn/]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/ACb0y</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; ACb0y]]></copyright><item><title><![CDATA[【1024程序员节福利，文末赠书3本】Linux后端研发学什么，怎么学！]]></title><link>https://blog.youkuaiyun.com/ACb0y/article/details/143176765</link><guid>https://blog.youkuaiyun.com/ACb0y/article/details/143176765</guid><author>ACb0y</author><pubDate>Wed, 23 Oct 2024 10:14:53 +0800</pubDate><description><![CDATA[对于计算机相关专业的大学生或者新入职的后端开发新人来说，学习Linux后端开发可能会感到有些困扰。后端开发的领域广阔且深入，每个主题都足以写成一本厚重的专业书籍，这让人们常常感到无从下手。]]></description><category></category></item><item><title><![CDATA[协程必知必会-系列4-协程本地变量]]></title><link>https://blog.youkuaiyun.com/ACb0y/article/details/143173518</link><guid>https://blog.youkuaiyun.com/ACb0y/article/details/143173518</guid><author>ACb0y</author><pubDate>Wed, 23 Oct 2024 07:52:54 +0800</pubDate><description><![CDATA[在上一篇文章中，我们介绍了如何通过协程来实现批量并发执行，本篇文章将向大家介绍如何在协程的基础之上，实现协程本地变量。]]></description><category></category></item><item><title><![CDATA[协程必知必会-系列3-批量并发执行]]></title><link>https://blog.youkuaiyun.com/ACb0y/article/details/143173476</link><guid>https://blog.youkuaiyun.com/ACb0y/article/details/143173476</guid><author>ACb0y</author><pubDate>Wed, 23 Oct 2024 07:43:47 +0800</pubDate><description><![CDATA[在上一篇文章中，我们介绍了协程是如何实现的，本篇文章将向大家介绍如何在协程的基础之上，实现批量并发执行。我们都知道可以使用多进程或者多线程来实现批量并发执行，那么协程中该如何实现呢？]]></description><category></category></item><item><title><![CDATA[吃透高并发模型与RPC框架，拿下大厂offer！！！]]></title><link>https://blog.youkuaiyun.com/ACb0y/article/details/143173449</link><guid>https://blog.youkuaiyun.com/ACb0y/article/details/143173449</guid><author>ACb0y</author><pubDate>Wed, 23 Oct 2024 07:36:38 +0800</pubDate><description><![CDATA[在当前的互联网市场环境下，竞争愈发激烈，内卷现象严重。在这种背景下，「**高并发模型和RPC框架已经成为了大型企业面试的重要环节**」。]]></description><category></category></item><item><title><![CDATA[揭秘一本Linux后端开发精品书的诞生之旅]]></title><link>https://blog.youkuaiyun.com/ACb0y/article/details/143169031</link><guid>https://blog.youkuaiyun.com/ACb0y/article/details/143169031</guid><author>ACb0y</author><pubDate>Tue, 22 Oct 2024 21:39:44 +0800</pubDate><description><![CDATA[《Linux 后端开发工程实践》是一本实用性极强的书，它是市面上少有的能完整描述如何从 0 到 1 构建 Linux C/C++后端微服务集群的书。通过实践案例和详细的代码实现，读者可以一步步构建出自己的后端微服务集群，从而深入理解和掌握 Linux 后端开发的精髓。它将带领您走进 Linux 后端开发的世界，开启您的 Linux 后端开发之旅。让我们一起探索 Linux 后端开发的无限可能，共同迎接挑战和机遇。​]]></description><category></category></item><item><title><![CDATA[协程必知必会-系列2-协程如何实现]]></title><link>https://blog.youkuaiyun.com/ACb0y/article/details/143163255</link><guid>https://blog.youkuaiyun.com/ACb0y/article/details/143163255</guid><author>ACb0y</author><pubDate>Tue, 22 Oct 2024 17:10:22 +0800</pubDate><description><![CDATA[在上一篇文章中，我们介绍了协程是什么？并使用C++11实现了一个开源的协程库（从本篇文章开始，我将带领大家逐步来实现协程库，「完整的代码可以从我开源在github上的仓库下载，欢迎大家fork和star。]]></description><category></category></item><item><title><![CDATA[协程必知必会-系列1-协程是什么]]></title><link>https://blog.youkuaiyun.com/ACb0y/article/details/143163081</link><guid>https://blog.youkuaiyun.com/ACb0y/article/details/143163081</guid><author>ACb0y</author><pubDate>Tue, 22 Oct 2024 17:07:16 +0800</pubDate><description><![CDATA[协程就是用户态的线程。这样解释可能过于抽象，让我们先来回顾一下，另外2个更常见的概念，进程（Process）与线程（Thread）。「进程是操作系统分配资源的基本单位」，只有在进程内才可以进行内存分配释放、文件读写、网卡数据的接收与发送等的资源操作。「线程是操作系统调度的基本单位」。进程和线程的状态对应用程序透明，并且在内核态中完成调度。协程对应用程序来说是有状态的，需要应用程序自行在用户态中完成协程的调度。]]></description><category></category></item><item><title><![CDATA[C++轻量级单元测试框架]]></title><link>https://blog.youkuaiyun.com/ACb0y/article/details/130362447</link><guid>https://blog.youkuaiyun.com/ACb0y/article/details/130362447</guid><author>ACb0y</author><pubDate>Tue, 25 Apr 2023 13:00:49 +0800</pubDate><description><![CDATA[单元测试是构建稳定、高质量的程序、服务或系统的必不可少的一环。通过单元测试，我们可以在开发过程中及时发现和修复代码中的问题，提高代码的质量和可维护性。同时，单元测试也可以帮助我们更好地理解代码的功能和实现细节，从而更好地进行代码重构和优化。]]></description><category></category></item><item><title><![CDATA[分布式内存缓存系统设计]]></title><link>https://blog.youkuaiyun.com/ACb0y/article/details/63683561</link><guid>https://blog.youkuaiyun.com/ACb0y/article/details/63683561</guid><author>ACb0y</author><pubDate>Sun, 19 Mar 2017 12:21:10 +0800</pubDate><description><![CDATA[1.问题任何平台随着用户规模的扩大、功能不断的添加，持久化数据库层承受的读写压力会越来越大，一旦数据库承压过大会导致读写性能陡然下降，严重时会导致大量的业务请求超时，进而发生“雪崩”引发严重的故障。2.解决方案在业务层和数据库持久层之间引入一层内存缓存层，对于复杂且业务逻辑上不会变化的查询结果进行缓存，业务请求再次发起时，每次都先从缓存层中查询，从而大大减少对数据库的查询，减小对数据库的压力。3.分]]></description><category></category></item><item><title><![CDATA[手把手教你实现自定义的应用层协议]]></title><link>https://blog.youkuaiyun.com/ACb0y/article/details/61421006</link><guid>https://blog.youkuaiyun.com/ACb0y/article/details/61421006</guid><author>ACb0y</author><pubDate>Sat, 11 Mar 2017 17:03:07 +0800</pubDate><description><![CDATA[1.简述
互联网上充斥着各种各样的网络服务，在对外提供网络服务时，服务端和客户端需要遵循同一套数据通讯协议，才能正常的进行通讯；就好像你跟台湾人沟通用闽南语，跟广东人沟通就用粤语一样。
实现自己的应用功能时，已知的知名协议（http，smtp，ftp等）在安全性、可扩展性等方面不能满足需求，从而需要设计并实现自己的应用层协议。
2.协议分类2.1按编码方式
二进制协议 
比如网络通信运输层中的tcp]]></description><category></category></item><item><title><![CDATA[extern “C” 陷阱]]></title><link>https://blog.youkuaiyun.com/ACb0y/article/details/9026253</link><guid>https://blog.youkuaiyun.com/ACb0y/article/details/9026253</guid><author>ACb0y</author><pubDate>Tue, 04 Jun 2013 22:27:10 +0800</pubDate><description><![CDATA[extern “C” 陷阱


extern “C”通常使用在C++中，由于C++支持函数重载，命名空间等技术，故C++编译器在编译C++代码时会对函数进行签名，也就是说编译后的函数名将发生变化。例如我们有如下的代码：
test.cpp
int fun(int a)
{
///nothing.
}
  在Ubuntu下用g++编译这个cpp文件获取它的目标文件test.o，命令：]]></description><category></category></item><item><title><![CDATA[memcpy Linux内核实现引发的思考：为什么嵌入式汇编中不用指定段寄存器]]></title><link>https://blog.youkuaiyun.com/ACb0y/article/details/8943296</link><guid>https://blog.youkuaiyun.com/ACb0y/article/details/8943296</guid><author>ACb0y</author><pubDate>Sat, 18 May 2013 11:21:27 +0800</pubDate><description><![CDATA[memcpy Linux内核实现引发的思考：为什么嵌入式汇编中不用指定段寄存器
最近买了王爽的汇编语言和Linux内核完全注释，准备开始好好学习一下汇编语言，并看看早期的Linux(0.11版本)源代码实现。
之前舍友面试TX是被问过memcpy什么时候不能用，这种问题如何解决？
答：当dest，src都指向同一个数组且dest>src，那么当n大于abs（dest > src）,则这个时候]]></description><category></category></item><item><title><![CDATA[高流量高并发网站架构（转）]]></title><link>https://blog.youkuaiyun.com/ACb0y/article/details/8827113</link><guid>https://blog.youkuaiyun.com/ACb0y/article/details/8827113</guid><author>ACb0y</author><pubDate>Sat, 20 Apr 2013 09:39:32 +0800</pubDate><description><![CDATA[Web2.0的兴起，掀起了互联网新一轮的网络创业大潮。以用户为导向的新网站建设概念，细分了网站功能和用户群，不仅成功的造就了一大批新生的网站，也极大的方便了上网的人们。但Web2.0以用户为导向的理念，使得新生的网站有了新的特点——高并发，高流量，数据量大，逻辑复杂等，对网站建设也提出了新的要求。

　　本文围绕高并发高流量的网站架构设计问题，主要研究讨论了以下内容：

　　首先在整个网络]]></description><category></category></item><item><title><![CDATA[C++内存对齐]]></title><link>https://blog.youkuaiyun.com/ACb0y/article/details/8824919</link><guid>https://blog.youkuaiyun.com/ACb0y/article/details/8824919</guid><author>ACb0y</author><pubDate>Fri, 19 Apr 2013 16:26:07 +0800</pubDate><description><![CDATA[一、为什么会有C++内存对齐

以下内容节选自《Intel Architecture 32 Manual》。

为了提高程序的性能，数据结构（尤其是栈）应该尽可能地在自然边界上对齐。原因在于，为了访问未对齐的内存，处理器需要作两次内存访问；然而，对齐的内存访问仅需要一次访问。

一个字或双字操作数跨越了4字节边界，或者一个四字操作数跨越了8字节边界，被认为是未对齐的，从而需要两次总线周]]></description><category></category></item><item><title><![CDATA[虚函数、虚继承对sizeof的影响]]></title><link>https://blog.youkuaiyun.com/ACb0y/article/details/8822983</link><guid>https://blog.youkuaiyun.com/ACb0y/article/details/8822983</guid><author>ACb0y</author><pubDate>Fri, 19 Apr 2013 14:08:48 +0800</pubDate><description><![CDATA[虚函数、虚继承对sizeof的影响
1、一个空类的大小
代码如下：
#include 
using namespace std;

class A
{
};

int main()
{
	cout << "A size = " << sizeof(A) << endl;
	return 0;
} 输出结果为：




分析：空类大小为1，编译器安插一个char给空类，用来标记它的每]]></description><category></category></item><item><title><![CDATA[一起来学POSIX thread 之 综合应用——线程池]]></title><link>https://blog.youkuaiyun.com/ACb0y/article/details/8581006</link><guid>https://blog.youkuaiyun.com/ACb0y/article/details/8581006</guid><author>ACb0y</author><pubDate>Thu, 14 Feb 2013 22:26:19 +0800</pubDate><description><![CDATA[一起来学POSIX thread 之 综合应用——线程池

1、为什么需要线程池？

部分应用程序需要执行很多细小的任务，对于每个任务都创建一个线程来完成，任务完成后销毁线程，而这就会产生一个问题：当执行的任务所需要的时间T1小于等于创建线程时间T2和销毁线程时间T3总和时即T1 ，应用处理任务的响应能力会大大减弱，从而影响了应用程序性能，为了解决这类问题，线程池技术提供了很好的解决方案。]]></description><category></category></item><item><title><![CDATA[一起来学POSIX thread 之 不变量、临界区、谓词]]></title><link>https://blog.youkuaiyun.com/ACb0y/article/details/8579560</link><guid>https://blog.youkuaiyun.com/ACb0y/article/details/8579560</guid><author>ACb0y</author><pubDate>Tue, 12 Feb 2013 21:11:33 +0800</pubDate><description><![CDATA[一起来学POSIX thread 之 不变量、临界区、谓词
1、不变量（invariant）
所谓的不变量是由程序作出的假设，特别是有关变量组间关系的假设。当编写队列包时，你需要为每一个队列指定一个队列头指针，指向队列的第一个元素。每一个数据元素也包含指向下一个元素的指针。重要的并不完全是数据，程序还要依赖于数据之间的关系。例如，队列或者为空，或者包含一个指向队首元素的指针。数据元素包含的指针]]></description><category></category></item><item><title><![CDATA[一起来学POSIX thread 之 线程状态]]></title><link>https://blog.youkuaiyun.com/ACb0y/article/details/8578865</link><guid>https://blog.youkuaiyun.com/ACb0y/article/details/8578865</guid><author>ACb0y</author><pubDate>Mon, 11 Feb 2013 22:02:19 +0800</pubDate><description><![CDATA[一起来学POSIX thread 之 线程状态



1、线程的四种基本状态的转换
在OS中线程作为最基本的调度单元，它存在着四种基本状态，各个状态的转化情况如下图。

四种状态的含义如下：
1）就绪状态：线程能够运行，但在等待可用的处理器。可能刚刚启动，或刚刚从阻塞中恢复，或者从运行状态中被其他线程抢占从运行状态转变为就绪状态。
2）运行状态：线程正在运行。在多处理器系统中，可]]></description><category></category></item><item><title><![CDATA[一起来学POSIX thread 之 线程的创建和基本操作接口]]></title><link>https://blog.youkuaiyun.com/ACb0y/article/details/8578338</link><guid>https://blog.youkuaiyun.com/ACb0y/article/details/8578338</guid><author>ACb0y</author><pubDate>Sun, 10 Feb 2013 23:46:15 +0800</pubDate><description><![CDATA[一起来学POSIX thread 之 线程的创建和基本操作接口
1、线程的创建
我们之前提到了POSIX thread的三个基本核心要输：执行环境、调度、同步。在这里我们首先介绍一下执行环境（Unix环境下）如何创建，POSIX thread提供了pthread_create接口用来创建线程。pthread_create的原型如下：
int pthread_create(pthread_t]]></description><category></category></item><item><title><![CDATA[一起来学POSIX thread 之 结构概览、基本数据类型和报错机制]]></title><link>https://blog.youkuaiyun.com/ACb0y/article/details/8577526</link><guid>https://blog.youkuaiyun.com/ACb0y/article/details/8577526</guid><author>ACb0y</author><pubDate>Sat, 09 Feb 2013 11:37:24 +0800</pubDate><description><![CDATA[一起来学POSIX thread 之 结构概览、基本数据类型和报错机制


1、结构概览
任何一个线程系统都包括三个基本要素：执行环境、调度和同步。在评估一个线程系统或者比较任意两个线程系统时，都可以从比较它们对这三个方面的支持开始。
POSIX thread通过调用pthread_create来创建执行环境（线程）。创建一个线程同样也调度了该线程的执行，这将通过调用指定的“线程启动”函]]></description><category></category></item></channel></rss>