摘要: Task.Wait 是 Task 的一个实例方法,用于等待 Task 完成,如果 Task 未完成,会阻塞当前线程。 非必要情况下,不建议使用 Task.Wait,而应该使用 await。 本文将基于 .NET 6 的源码来分析 Task.Wait 的实现,其他版本的实现也是类似的。 阅读全文
posted @ 2023-06-15 01:17 黑洞视界 阅读(4100) 评论(4) 推荐(17) 编辑
摘要: CAS 的基本概念 CAS(Compare-and-Swap)是一种多线程并发编程中常用的原子操作,用于实现多线程间的同步和互斥访问。 它操作通常包含三个参数:一个内存地址(通常是一个共享变量的地址)、期望的旧值和新值。 CompareAndSwap(内存地址,期望的旧值,新值) CAS 操作会比较 阅读全文
posted @ 2023-04-21 00:19 黑洞视界 阅读(2619) 评论(1) 推荐(12) 编辑
摘要: LRU缓存替换策略 缓存是一种非常常见的设计,通过将数据缓存到访问速度更快的存储设备中,来提高数据的访问速度,如内存、CPU缓存、硬盘缓存等。 但与缓存的高速相对的是,缓存的成本较高,因此容量往往是有限的,当缓存满了之后,就需要一种策略来决定将哪些数据移除出缓存,以腾出空间来存储新的数据。 这样的策 阅读全文
posted @ 2023-04-05 17:56 黑洞视界 阅读(2988) 评论(10) 推荐(15) 编辑
摘要: 目录前言AsyncMethodBuilder 介绍AsyncMethodBuilder 是状态机的重要组成部分AsyncMethodBuilder 的结构AsyncMethodBuilder 功能分析对状态机的生命周期进行管理对 async 方法的返回值进行包装小结async void自定义 Asy 阅读全文
posted @ 2023-03-15 23:07 黑洞视界 阅读(4259) 评论(4) 推荐(19) 编辑
摘要: AsyncLocal 用法简介 通过 AsyncLocal 我们可以在一个逻辑上下文中维护一份私有数据,该上下文后续代码中都可以访问和修改这份数据,但另一个无关的上下文是无法访问的。 无论是在新创建的 Task 中还是 await 关键词之后,我们都能够访问前面设置的 AsyncLocal 的数据。 阅读全文
posted @ 2023-03-01 23:13 黑洞视界 阅读(7077) 评论(19) 推荐(46) 编辑
摘要: 目录前言从叶子节点删除数据从非叶子节点删除数据提前扩充只有 t-1 的 Item 的节点:维持 B树 平衡的核心算法从左兄弟节点借用 Item从右兄弟节点借用 Item与左兄弟节点或者右兄弟节点合并最值的删除代码实现Benchmarks:与 优先队列 PriorityQueue 的比较入队性能出队性 阅读全文
posted @ 2023-02-04 20:33 黑洞视界 阅读(556) 评论(0) 推荐(5) 编辑
摘要: 目录前言查询数据算法说明代码实现查询最值算法说明代码实现B树的遍历算法说明代码实现Benchmarks总结参考资料 前言 本文为系列文章 B树的定义及数据的插入 数据的读取及遍历 数据的删除 前一篇文章为大家介绍了 B树 的基本概念及其插入算法。本文将基于前一篇的内容,为大家介绍插入到 B树 中的数 阅读全文
posted @ 2022-12-18 21:05 黑洞视界 阅读(557) 评论(0) 推荐(7) 编辑
摘要: 目录前言索引原理局部性(Locality)数据的局部性内存存储和磁盘存储磁盘存储适合的索引结构B树简介定义B树中数据的有序性用C#定义数据结构插入数据的过程分裂:新节点诞生的唯一方式根节点的分裂非根节点的分裂分裂导致树的高度增加提前分裂插入算法实现Key 已存在时的处理策略插入算法总结参考资料 前言 阅读全文
posted @ 2022-12-11 09:22 黑洞视界 阅读(1058) 评论(1) 推荐(10) 编辑
摘要: 前言 本文将以 C# 语言来实现一个简单的布隆过滤器,为简化说明,设计得很简单,仅供学习使用。 感谢@时总百忙之中的指导。 布隆过滤器简介 布隆过滤器(Bloom filter)是一种特殊的 Hash Table,能够以较小的存储空间较快地判断出数据是否存在。常用于允许一定误判率的数据过滤及防止缓存 阅读全文
posted @ 2022-06-26 22:29 黑洞视界 阅读(4607) 评论(16) 推荐(41) 编辑
摘要: 目录前言Task.ContinueWithContinueWith 的产物:ContinuationTask额外的参数回调的容器:TaskContinuationTask.ContinueWith 回调的生命周期阶段一 将回调封装进 ContinueWithTaskContinuation阶段二 回 阅读全文
posted @ 2022-02-19 13:31 黑洞视界 阅读(11223) 评论(14) 推荐(42) 编辑