<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[faysh的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/faysh</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; faysh]]></copyright><item><title><![CDATA[.NET并发编程-Reactive Extensions反应式扩展]]></title><link>https://blog.youkuaiyun.com/faysh/article/details/114526079</link><guid>https://blog.youkuaiyun.com/faysh/article/details/114526079</guid><author>faysh</author><pubDate>Mon, 08 Mar 2021 11:18:52 +0800</pubDate><description><![CDATA[1、反应式编程
它是一种编程范式，将事件作为数据流异步监听和处理。与编辑Excel表格类似，单个元素的值是由其他单元格的值决定的公式。一旦其他单元格的值发生变化，该公式的单个单元格将相应更新。
如果操作是以声明方式描述的，那么它就是函数式反应式编程。
反应式编程的优点是描述了一种简单易维护的方法来处理异步、无竞争的计算和IO，从而增加了多核、多CPU硬件上计算资源的使用。事件的控制从“请求”变成了“等待”。在大数据的实时流处理环境中，采用了反应式编程，如推文系统处理、日志系统收集等。
2、.NET中的工具
]]></description><category></category></item><item><title><![CDATA[c++随机数的研究]]></title><link>https://blog.youkuaiyun.com/faysh/article/details/114507547</link><guid>https://blog.youkuaiyun.com/faysh/article/details/114507547</guid><author>faysh</author><pubDate>Mon, 08 Mar 2021 11:00:39 +0800</pubDate><description><![CDATA[一个项目有一个复杂的排序。首先，各种规则依次排序。最后，如果还是平手，随机放置，并行排序。测试中发现了一个奇怪的现象，并列时是随机排序的，但是最后两个案例的打印顺序每次都是一样的，随机数没有起到任何作用。分析后发现随机数种子srand(clock())意在连续调用该函数，为多个随机数设置种子。其实种子集是一样的，最后生成的随机数是伪随机数。那么有没有一种随机数方法可以保证快速循环中的随机性呢？原问题比较复杂，所以举一个类似的例子来说明具体的场景:
void test_random()
{
vector ve]]></description><category></category></item><item><title><![CDATA[一文了解类加载机制--ClassLoader]]></title><link>https://blog.youkuaiyun.com/faysh/article/details/114380924</link><guid>https://blog.youkuaiyun.com/faysh/article/details/114380924</guid><author>faysh</author><pubDate>Thu, 04 Mar 2021 23:54:57 +0800</pubDate><description><![CDATA[一、什么是ClassLoader？
众所周知，当我们编写一个Java程序时，它是由几个程序组织的一个完整的Java应用程序。类文件。程序运行时，会调用程序的一个入口函数来调用系统的相关函数，而这些函数封装在不同的类文件中，所以我们经常需要从这个类文件中调用另一个类文件中的方法。如果另一个文件不存在，程序启动时，不会一次性加载程序使用的所有类文件，而是根据程序的需要通过Java的ClassLoader动态加载一个类文件到内存中，这样类文件加载到内存后才能被其他类引用。因此，ClassLoader用于将类文件动]]></description><category></category></item><item><title><![CDATA[论Redis的持久性]]></title><link>https://blog.youkuaiyun.com/faysh/article/details/114342937</link><guid>https://blog.youkuaiyun.com/faysh/article/details/114342937</guid><author>faysh</author><pubDate>Thu, 04 Mar 2021 00:34:37 +0800</pubDate><description><![CDATA[持久性一直是Redis使用中的一个重要话题。很多同学在使用Redis的过程中，对于如何选择持久性策略，如何配置持久性都有疑问。本文试图对Redis的持久性进行系统的分析和比较，以期正确认识Redis的持久性，并结合实际应用选择合理的持久性机制。
1.背景知识
持久性是数据存储领域的一个常见话题。持久性可以描述为将相关数据存储在非易失性存储器中的过程。数据持久化后，即使发生一定程度的故障，只要持久化的设备没有损坏，我们就可以使用持久化的数据进行恢复，在一定程度上减少了故障造成的损失。
我们使用的数据存储，无论]]></description><category></category></item><item><title><![CDATA[分布式事务的概念及特征]]></title><link>https://blog.youkuaiyun.com/faysh/article/details/114341046</link><guid>https://blog.youkuaiyun.com/faysh/article/details/114341046</guid><author>faysh</author><pubDate>Wed, 03 Mar 2021 23:36:03 +0800</pubDate><description><![CDATA[基本概念
事务
由多个计算任务组成的具有确定边界的工作集。交易可能包括接口访问、网络通信、数据采集和处理。严格的事务实现应该具有四个特征:原子性、一致性、隔离性和持久性。
原子性:事务中的所有任务要么完成，要么失败。没有中间状态。
隔离:不同事务之间的操作互不影响，并发事务的中间状态对其他事务是不可见的。
持久性:一旦交易完成，状态将永久有效。
一致性:事务涉及的资源或数据在事务前后都遵循一定的约束，事务的完成或失败都不会影响这种状态。
分布式事务
在分布式系统中，事务访问涉及的资源和计算涉及的节点部署在不]]></description><category></category></item><item><title><![CDATA[为了提高容灾能力采用多地多活与单元化架构]]></title><link>https://blog.youkuaiyun.com/faysh/article/details/114286863</link><guid>https://blog.youkuaiyun.com/faysh/article/details/114286863</guid><author>faysh</author><pubDate>Wed, 03 Mar 2021 22:20:32 +0800</pubDate><description><![CDATA[背景
业务发展到一定阶段后，任何因故障导致的服务中断都会带来巨大的损失。为了提高系统的可扩展性和高可用性，我们不断努力消除系统的单点瓶颈。如果应用集群用于解决服务层的单点问题，那么主从数据库用于解决数据库层的单点问题。
虽然我们使用了微服务架构，但是我们很好地解决了服务治理和监控的问题，使得少数服务器的故障仍然不影响整体服务质量。但是由于所有的设备都存放在同一个机房，所以无法承受机房层面的故障，比如停电、火灾、地震等。，后果不堪设想。虽然单点故障在机房解决的很好，但是机房本身就是单点。
为了提高机房层面的容]]></description><category></category></item><item><title><![CDATA[SOLID架构设计原则和适用领域]]></title><link>https://blog.youkuaiyun.com/faysh/article/details/114274839</link><guid>https://blog.youkuaiyun.com/faysh/article/details/114274839</guid><author>faysh</author><pubDate>Tue, 02 Mar 2021 00:13:38 +0800</pubDate><description><![CDATA[一般来说，如果你想构建一个好的软件系统，你应该从编写整洁的代码开始。毕竟，如果建筑中使用的砖质量不好，框架可以发挥的作用就非常有限。相反，如果一个建筑的建筑设计不好，用质量好的砖是没有用的。这是SOLID设计原理要解决的问题。
SOLID原理的主要功能是告诉我们如何将数据和函数组织成类，以及如何将这些类链接成程序。请注意，虽然这里使用了“类”这个词，但这并不意味着我们将要讨论的设计原则只适用于面向对象编程。这里的类只代表一组数据和函数，每个软件系统都会有自己的分类体系，不管他们是否称之为“类”，其实都是SO]]></description><category></category></item><item><title><![CDATA[吞吐量、QPS、并发数等概念]]></title><link>https://blog.youkuaiyun.com/faysh/article/details/113891429</link><guid>https://blog.youkuaiyun.com/faysh/article/details/113891429</guid><author>faysh</author><pubDate>Sat, 20 Feb 2021 19:18:05 +0800</pubDate><description><![CDATA[开发原因需要了解吞吐量(TPS)、QPS、并发数、响应时间(RT)等概念如下:
1。响应时间(RT)
响应时间是指系统响应请求的时间。直觉上，这个指标非常符合人们对软件性能的主观感受，因为它完整地记录了整个计算机系统的处理时间。由于一个系统通常提供多种功能，不同功能的处理逻辑差异很大，不同功能的响应时间也不一样，甚至同一功能在不同输入数据下的响应时间也不一样。因此，在讨论一个系统的响应时间时，人们通常指的是系统所有功能的平均时间或所有功能的最大响应时间。当然，对于每个函数或函数组，通常需要讨论平均响应时间和]]></description><category></category></item><item><title><![CDATA[线程池源码分析 合理设置可以提高任务响应速度]]></title><link>https://blog.youkuaiyun.com/faysh/article/details/113829911</link><guid>https://blog.youkuaiyun.com/faysh/article/details/113829911</guid><author>faysh</author><pubDate>Wed, 17 Feb 2021 00:03:37 +0800</pubDate><description><![CDATA[概述
在java中，ThreadPoolExecutor是一个不可避免的类，它体现了享受元模式的思想。通过在容器中创建一定数量的线程供重用，可以避免频繁创建线程带来的额外开销。合理设置线程池可以提高任务响应速度，避免因线程数量超过硬件能力而导致的意外情况。本文将深入线程池的源代码，了解线程池的底层实现和运行机制。
ThreadPoolExecutor 类提供了四种构造方法。基于具有最完整参数的构造方法，我们可以找到创建线程池所需的变量:
public ThreadPoolExecutor(int coreP]]></description><category></category></item></channel></rss>