Rust并发编程番外篇: Mutex内部实现 (colobu.com)

【简介】

Mutex是最常用的一种同步原语,它提供了互斥锁的功能,多线程可以互斥访问共享数据以及通过锁保护临界区。Rust标准库提供了Mutex的实现,接下来我们看看它是怎么实现的。

点击查看原文 >>

@技术头条 2023-11-06 22:56 / 原作者微博:@colobu / 0个评论
赞过的人: @IT技术博客大学习
要不要再学学下面的文章?
图解Blink-Tree:B+Tree的一种并发优化结构和算法 (www.codedump.info)
本文介绍了 Blink-Tree,这是一种 B+Tree 的并发优化结构。通过引入 high key 和 link 指针,解决了并发访问时的性能问题,特别适用于高并发环境的存储引擎优化。如果你对数据库存储引擎感兴趣,这篇文章不容错过!
by @技术头条 2024-09-09 23:46 查看详情
在 Rust 中同时支持异步和同步代码 (colobu.com)
在 Rust 中如何同时支持异步和同步代码?本文提供了详细的解决方案,从基础实现到 maybe_async crate 的使用,帮助你在一个代码库中高效处理这两种模式的转换。无论你是构建高并发系统还是希望代码更灵活,这篇文章都提供了实用的技巧。感兴趣的开发者不容错过!
by @技术头条 2024-09-08 23:37 查看详情
Android|使用阿里云推流 SDK 实现双路推流不同画面 (mazhuang.org)
想知道如何在 Android 中通过阿里云 SDK 实现双路推流不同画面?本文介绍了一个巧妙的解决方案,虽然阿里云 SDK 不支持原生多路推流,但通过跨进程调用,实现了同时推送不同区域的画面,适用于直播和录播场景的分离展示。开发者不容错过的实战分享,赶快阅读!
by @技术头条 2024-09-08 23:26 查看详情
使用Rust捕获和解析网络包 (colobu.com)
这篇文章介绍了如何使用Rust编程语言捕获和解析网络包,以提取TCP时间戳并计算网络延迟。作者利用pcap库捕获网络包,并使用pdu库解析TCP选项中的时间戳信息,结合哈希映射存储五元组信息以计算往返时间。文中提供了代码示例,展示了在Mac系统上实现这一过程的步骤。
by @技术头条 2024-08-06 07:53 查看详情
让AI 实现一个红黑树 (colobu.com)
文章探讨了使用AI帮助实现红黑树数据结构的过程。作者尝试使用多种AI工具模拟专家(如Rob Pike)实现红黑树,并进行了代码优化、单元测试和Fuzz测试。过程中发现AI生成的代码存在问题,但通过不断调整和AI协作,最终实现了功能完善的红黑树实现。文章强调AI在代码生成、测试和优化方面的潜力与不足。
by @技术头条 2024-08-06 07:52 查看详情
“测试 Rust 的 I/O 性能” (colobu.com)
这篇文章探讨了在Linux上使用Rust进行文件I/O操作的性能测试。作者通过多种方法对读取大文件进行基准测试,包括使用标准BufReader、Direct I/O、内存映射(Mmap)以及io_uring等技术。结果显示,使用AVX-512指令集的内存映射实现是最快的方法,其读取速度超过8.4 GB/s。文章强调不同技术的性能差异,并提供代码示例供开发者参考。
by @技术头条 2024-08-06 07:51 查看详情
如何用简单的Web方法实现图片的马赛克效果 (www.zhangxinxu.com)
文章介绍了如何通过简单的Web技术实现图片的马赛克效果。作者主要讨论了使用SVG滤镜来实现此效果,尤其是通过使用像<feFlood>、<feComposite>和<feMorphology>等SVG元素。此外,文章还探讨了通过CSS属性image-rendering: pixelated来模拟马赛克效果的方法,即通过放大小图片来达到效果。文中提供了详细的示例和代码片段来帮助实现这些效果。
by @技术头条 2024-08-06 07:48 查看详情
Agent是如何工作的:概念及LangChain实现 (it.deepinmind.com)
LLM(大型语言模型)在自主Agent领域的应用受到了广泛关注。你可能已经在诸如Auto-GPT、BabyAGI等流行应用中了解过它们的用法,这些应用几乎每天都层出不穷。

理解这些应用的基本原理并不复杂,因为大多数工具的工作流程大致相同。
by @技术头条 2024-03-31 21:13 查看详情
sqlite并发读写的演进之路 (www.codedump.info)
本文梳理sqlite并发读写方案的演进之路。
by @技术头条 2024-03-21 23:26 查看详情
为 log 实现的无锁 Ringbuffer (blog.codingnow.com)
这两天在改 log 模块。我们需要一个并发写 log 的模块,它有多个 log 生产者一个消费者,这个唯一的消费者在 log 线程中把 log 数据持久化。

大多数 log 生产者是在第三方库的 callback 函数中调用的,比如 bgfx ,如果写 log 不够快的话,就会阻塞渲染。这个 callback 需要自己保证线程安全。因为 bgfx 支持多线程渲染,所以写 log 的 callback 可能在不同的线程触发。

过去在实现 bgfx 的 luabinding 时,我实现了一个简单的 mpsc 队列,get_log 这个函数就是那个单一消费者,它取出队列中所有的 log 信息,返回到 lua 虚拟机中。

它是用 spin_lock 实现的。这两天,我想应该可以实现一个更通用的无锁版本。

在我的需求中,log 信息是允许丢掉的。所以我开了一个固定大小的 ri
by @技术头条 2024-03-12 22:45 查看详情