首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏每日一善

    rust并发编程

    并发的方式 多进程 多线程 协程 多线程遇到的问题 数据竞争 内存不安全和未定义的行为 常用的两种线程模型(rust都支持) 锁管理临界区 消息通信 rust并发 通过后thread::spawn关键字 自定义线程通过Builder::new 线程从并发模型 数据共享 Rrc实现变量-可以读,但是没法修改 互斥mutex。 共享变量 支持读写锁RwLock 通过消息通信 mpse模块 channel和sync_channel rust中的线程安全 parking_lot检查死锁 保证安全的特征,send和sync 在mutex 和rwlock无法满足性能,或者觉得不好用时 actor模型比如库actix,rayon工作窃取,crossbeam并发工具库 use std::thread; //use std::rc::Rc; use

    57110编辑于 2022-05-14
  • 来自专栏学点Rust

    Rust并发控制之Barrier

    Rust 有很多种控制并发的方式,Barrier(屏障)是其中一种用来同步多线程计算的方式。 今天拿代码来简单看下。 比如我们要多线程计算,期望所有线程都计算完毕再输出最终结果。 这种组合也是一种有意思的并发控制方式,下次我们再聊聊它们。 推荐阅读 掌握Rust:从零开始的所有权之旅 聊聊Rust的Cell和RefCell 聊聊共享所有权之Rc和Arc 聊聊Rust并发约束:Send和Sync 如果有用,点个 在看,让更多人看到 外链不能跳转

    51130编辑于 2023-11-27
  • 来自专栏学点Rust

    Rust并发控制之Condvar

    上次提到的 Barrier 用到了 Rust 的 condvar 和 mutex,今天来看下 condvar 的用法。 因为是多线程并发构建的 notify_one 和 wait,存在调用 notify_one 时没有线程在等待的可能,导致唤醒次数少于等待次数的情况。 综上这两点,condvar 唤醒时是需要重新检查条件是否依旧满足,而且需要和 mutex 一起使用,来确保条件值获取的并发安全。 https://github.com/crossbeam-rs/crossbeam/blob/master/crossbeam-utils/src/sync/wait_group.rs 推荐阅读 掌握Rust :从零开始的所有权之旅 Rust并发控制之Barrier 聊聊共享所有权之Rc和Arc 如果有用,点个 在看,让更多人看到

    66030编辑于 2023-11-27
  • 来自专栏Rust学习专栏

    Rust并发编程总结

    在Serverless的喧嚣背后,Rust看似牢牢占据了C位,但其实在高并发这个话题下要总结的模式与套路其实很多,尤其是像Tokio专业的编程框架,对于程序员编写高性能程序的帮助很大。 高并发总结 Rust是近些年来随着Serverless一起新兴起的语言,表面上看他像是C,既没有JVM虚拟机也没有GC垃圾回收器,但仔细一瞧他还不是C,Rust特别不信任程序员,力图让Rust编译器把程序中的错误杀死在在生成可执行文件之前的 会出现的问题,在Rust中都不会出现,因为Go的那些用法,通通不符合Rust变量生命周期的检查,想编译通过都是不可能完成的任务。 目前Rust的高并发编程框架最具代表性的就是Tokio,本文开头Future的例子就是基于Tokio框架编写的,这里也不加赘述了。 根据官方的说法每个Rust的Tokio任务只有64字节大小,这比直接通过folk线程去网络请求,效率会提升几个数量级,在高并发框架的帮助下,开发者完全可以做到极限压榨硬件的性能。 ​

    1.6K40发布于 2021-10-01
  • 来自专栏学点Rust

    Rust并发控制之Channel

    Rust 官方sync包中提供了mpsc模式的 (多生产者,单消费者:multi-producer, single-consumer) channel,可以实现基于消息并发控制,而不是依赖控制内存共享( 文章目录 规则 sync_channel - spsc sync_channel - mpsc channel 并发安全 规则 首先一般 channel 机制都保证了 生产者(producer/sender 这就能很好的实现对并发顺序的控制, 比如下边代码,用两组 channel 实现 1 和 2 的交替打印。 Sync for Receiver<T> {} 最后来看看 rust 如何保证 channel 的并发安全 Sender<T>同时支持Send和Sync,其维护的消息队列可以安全的在线程间传递所有权, 依旧是巧妙的通过Send和Sync标记 trait 保证了并发的安全,轻松实现无畏并发

    62510编辑于 2023-12-13
  • 来自专栏菩提树下的杨过

    Rust常用并发示例代码

    记录几个常用的并发用法: ---- 1、如何让线程只创建1次 先看一段熟悉的java代码: void method1() { new Thread(() -> { while ( } catch (InterruptedException e) { } } }).start(); } } 在rust now:1662285716 22222 -> now:1662285716 thread -> now:1662285718 33333 -> now:1662285718 参考文章: Rust 语言圣经-多线程并发编程

    1.2K30编辑于 2022-09-28
  • 来自专栏柒八九技术收纳盒

    Rust学习笔记之并发

    今天,我们继续「Rust学习笔记」的探索。我们来谈谈关于「Rust学习笔记之并发」的相关知识点。 如果,想了解该系列的文章,可以参考我们已经发布的文章。如下是往期文章。 文章list Rust学习笔记之Rust环境配置和入门指南 Rust学习笔记之基础概念 Rust学习笔记之所有权 Rust学习笔记之结构体 Rust学习笔记之枚举和匹配模式 Rust学习笔记之包、Crate 和模块 Rust学习笔记之集合 Rust学习笔记之错误处理 Rust学习笔记之泛型、trait 与生命周期 Rust学习笔记之闭包和迭代器 Rust学习笔记之智能指针 你能所学到的知识点 ❝ 并发编程Concurrent Rust 中一个实现消息传递并发的主要工具是 通道channel,Rust 标准库提供了其实现的编程概念。 ---- 通道与所有权转移 所有权规则在消息传递中扮演了重要角色,其有助于我们编写安全的并发代码。防止并发编程中的错误是在 Rust 程序中考虑所有权的一大优势。

    54220编辑于 2023-08-01
  • 来自专栏繁依Fanyi 的专栏

    Rust 基础篇】Rust 多线程:并发编程的艺术

    本篇博客将详细介绍 Rust 中多线程的使用方法,包含代码示例和对定义的详细解释。 Rust 中的多线程 Rust 中的多线程通过 std::thread 模块来实现,它提供了创建和管理线程的功能。 多线程的应用场景 多线程在计算机科学中有着广泛的应用场景,尤其是在并发处理和性能优化方面。以下是一些常见的多线程应用场景: 并行计算:多线程可以同时执行独立的任务,提高计算速度和性能。 服务器编程:服务器需要同时处理多个客户端请求,多线程可以使服务器更高效地处理并发请求。 图像处理:在图像处理中,多线程可以同时处理不同区域的像素,加速图像处理过程。 总结 本篇博客详细介绍了 Rust 中多线程的使用方法,包括创建线程、线程间通信、等待线程结束等。Rust 提供了强大的多线程支持,通过合理地使用同步原语可以避免线程安全问题。 希望本篇博客对你理解和应用 Rust 中的多线程编程有所帮助。感谢阅读!

    1.7K40编辑于 2023-10-12
  • 来自专栏Rust语言学习交流

    Rust日报】 2019-05-08:Rust并发的实践研究

    Read More cargo registry 相关文档 ---- 「论文」Rust并发的实践研究 #concurrency #hashmap 该论文通过实现一个并发无锁HashMap来研究Rust类型系统如何影响并发数据结构的开发和改进 他们的代码库concache在GitHub上公开,是Rust语言中最快的并发HashMap之一,可以帮助降低并发程序中的瓶颈。 x12pp Read More ---- 「讨论」Rust和C编译器优化问题 #c 该reddit帖子作者用C和Rust分别写了一个同样功能的示例,发现rust编译器不如clang编译器优化的彻底,clang 完整的更新列表 ---- rust-latest: 用于获取最新版Rust工具链的CLI工具 #cli rust-latest ---- Cargo Vender 子命令即将登陆Cargo #cargo Read More ---- 使用自定义工具链解决Rust和Glibc的问题 #glibc Rust和Glibc在动态链接的时候可能会失效,该文作者建议使用自定义工具链来解决此问题。

    1.3K30发布于 2019-07-09
  • 来自专栏学点Rust

    Rust异步编程之Future并发处理

    上篇文章我们知道,Rust的Future是异步执行,await时是阻塞在当前的异步任务task上,直到完成。 当多个异步任务执行时,如果只能都阻塞一个个执行,那就变成同步串行执行了,当然不是我们通常希望的并发处理方式,今天就来聊聊多个异步任务的一些并发处理方式。 文章目录 join try_join spawn select 顺序执行 precondition 分支修改 cancel join 多个异步任务执行时,如果希望全部执行完成后统一返回,可以让他们都并发去执行 ("error: {}", err); } } } spawn 上边join虽然是让多个异步任务并发执行,但其实际还是在同一个task上异步执行,如果想让每个异步任务都在一个新的

    76120编辑于 2024-01-11
  • 来自专栏程序人生

    透过 Rust 探索系统的本原:并发原语

    几周前我写了篇关于并发的文章(透过 rust 探索系统的本原:并发篇),从使用者的角度介绍了常用的处理并发的工具:Mutex / RwLock / Channel,以及 async/await。 今天,我们就来简单聊聊这些基础的并发原语,了解它们的差异,明白它们使用的场景,对撰写高性能的并发应用有很大的帮助。 Rust 的 spin-rs crate [8] 提供了 spinlock 的实现。 那么,atomic 除了做其它并发原语,还有什么作用? 我个人用的最多的是做各种 lock-free 的数据结构。 更复杂的场景如我之前文章《透过 rust 探索系统的本原:并发篇》:数据接收,通知数据写入,日志写满,通知 S3 upload。 虽然在 Rust 里,我们可以「无畏并发」(Fearless concurrency)—— 当我们的代码编译通过,那么绝大多数并发问题都可以规避,但性能上的问题,逻辑上的死锁还需要开发者照料。

    1.3K20发布于 2021-04-07
  • 来自专栏学点Rust

    聊聊Rust并发约束:Send和Sync

    不知道你有没有好奇过,Rust是怎么控制并发安全的。为什么编译器在编译时就能发现一些并发安全的问题。 今天拿例子聊聊这背后Rust的两个并发约束trait:Sync和Send,看看它们是怎么控制并发安全的。 并发安全检查变成了trait bound检查,这样就能在编译时发现问题,而不是在运行时,是不是很巧妙! 也就是说,需要并发中需要安全引用(&T)都需要T被标记实现了Sync,否则编译器会报错。 又是一个巧妙的设计,通过trait bound检查了引用是否满足并发安全。 nomicon/send-and-sync.html 推荐阅读 掌握Rust:从零开始的所有权之旅 聊聊Rust的Cell和RefCell 聊聊共享所有权之Rc和Arc 如果有用,点个 在看,让更多人看到

    66330编辑于 2023-11-27
  • 来自专栏程序人生

    透过 rust 探索系统的本原:并发

    rust 是一门非常优秀的语言,我虽然没有特别正式介绍过 rust 本身,但其实已经写了好多篇跟 rust 相关的文章: 沅有芷兮:类型系统的数学之美 Noise 协议的应用 用 noise 协议的思路来点对点加密文件 这个系列并不会介绍大量的 rust 代码,因此其内容对非 rust 程序员也有好处。 这一篇我们讲并发。几年前我曾经写过一篇介绍并发概念的文章:concurrency,大家感兴趣可以看看。 这是并发处理的第一种范式:共享状态的并发(Shared-State Concurrency)。 这是最典型的并发使用模型,大部分的客户端/服务器实现都能用 mpsc 模型来处理。rust 标准库里有 std::mpsc::channel 来处理 mpsc 模型。 它们可以以一个更小的粒度在用户态进行并发处理,代价是用户态需要一个调度器。golang / erlang 在语言层面的运行时提供了这个调度器,而 rust 需要引入相关的库。

    1.2K10发布于 2021-03-17
  • 来自专栏光城(guangcity)

    Rust那些事之并发Send与Sync

    Rust那些事之并发Send与Sync Send与Sync在Rust中属于marker trait,代码位于marker.rs,在标记模块中还有Copy、Unpin等trait。 Sync for Wrapper {} 本节将会重点讲解Send、Sync相关的并发知识。 1.auto trait 可以通过安装nightly版使用feature特性。 Arc::new(Mutex::new(Foo{})) 在Go中使用Mutex,张这个样子: v map[string]int mux sync.Mutex 可以看到rust一行便可以知道保护的是哪个数据 同理:RwLock是读写锁,需要满足并发读,因此要求T必须实现Sync。 unsafe impl<T: ?

    98510编辑于 2023-02-28
  • 来自专栏CSDNToQQCode

    Rust并发编程实战-多线程武侠对战系统

    内存安全 · 高性能 · 并发可靠——三大优势的完美体现 前言 欢迎来到Rust 并发编程实战项目!这是一个融合了经典武侠元素与 Rust 高级多线程技术的完整实战案例。 在这个项目中,你将通过张无忌与成昆的经典对决,深入理解 Rust并发编程领域的三大核心优势:内存安全、高性能和并发可靠。 Rust 性能接近 C++,无运行时开销 并发可靠 编译时检查数据竞争 运行时检查 / 无检查 Rust 编译时发现错误,开发效率更高 核心代码示例:三大优势的完美结合 // 示例:游戏状态更新( 体验 Rust 安全优势:编译时保证 vs 运行时检查 实践网络编程:TCP 服务器/客户端实现 适用人群 Rust 学习者:想深入理解 Rust 多线程编程 系统程序员:需要构建高性能并发系统 游戏开发者 最重要的是,Rust 的零成本抽象让我在获得安全性的同时,性能没有丝毫损失。这个项目不仅让我掌握了多线程编程的核心技术,更让我认识到:好的语言设计可以让并发编程从"容易出错"变成"难以出错"。️

    25410编辑于 2025-12-16
  • 来自专栏Rust语言学习交流

    Rust 日报】2020-07-08 Rust 嵌入式开发中的并发模式

    在 PinePhone 上编译 Rust PinePhone 是一款基于Linux的智能手机 ? Rust 嵌入式开发中的并发模式 https://fasterthanli.me/articles/getting-in-and-out-of-trouble-with-rust-futures Ludusavi :PC端游戏备份工具 https://github.com/mtkennerly/ludusavi 只有 Rust 把 await 语法用对了 最开始thomastc觉得 Rust 把 await foo https://www.reddit.com/r/rust/comments/hnbz78/rust_is_the_only_language_that_gets_await_syntax/ ----

    55320发布于 2020-07-14
  • 来自专栏roseduan写字的地方

    Rust 练手项目—实现 MVCC 多版本并发控制

    本文提到的完整源码地址:https://github.com/rosedblabs/rust-practice 事务及 MVCC 数据库的事务是一个经久不衰的话题,相信大家都已经耳熟能详了,事务是指数据库中单一逻辑工作单元的操作集合 这意味着并发执行的事务之间不应该相互影响,即使它们同时访问相同的数据。这样可以防止并发执行时出现数据不一致或者丢失的问题。 持久性(Durability):一旦事务被提交,其结果应该是永久性的。 隔离性是这其中稍微复杂的,其他的几个特性其实都不难理解,这篇文章将会使用 Rust 代码,实现一个最基础的 MVCC 事务,让一些重要概念不仅仅存在于理论层面,而是让大家上手实践,这样才能够加深理解并完全掌握 并且存储的时候,同一个 key 在物理上会有多份,分别对应不同的版本,本质上是一种通过空间冗余的方式来提升并发性能,让每一个事务都“看起来像”是单独执行,不受其他并发事务的影响,做到了读写互不阻塞。 完整源码地址: https://github.com/rosedblabs/rust-practice

    38710编辑于 2024-05-11
  • 来自专栏AI SPPECH

    Rust高级编程:泛型、闭包与并发

    通过本文的学习,你将能够编写更加灵活、高效和并发安全的Rust程序。 Rust并发编程 并发编程是一种同时执行多个任务的编程方式,它可以充分利用多核处理器的优势,提高程序的性能。 在Rust中,并发编程是类型安全的,Rust的所有权系统和借用检查器可以帮助我们避免许多常见的并发问题,如数据竞争(Data Race)。 16. 消息传递并发 消息传递并发是一种多个线程通过发送消息来通信的并发模式。在Rust中,我们可以使用通道(Channel)来实现消息传递并发。 结语 通过本文的学习,我们已经掌握了Rust的泛型编程、闭包与迭代器以及并发编程等高级特性。这些特性是Rust语言的核心优势之一,掌握它们将使你能够编写更加灵活、高效和并发安全的程序。

    24210编辑于 2025-11-13
  • 来自专栏CSDNToQQCode

    Rust专项——并发前置:SendSync 与共享数据设计

    本篇作为进入并发编程之前的地基,讲清楚两个关键自动 trait:Send 和 Sync,以及在多线程下如何安全地共享和修改数据。 Cell<T>/RefCell<T>:非 Sync,仅单线程;Mutex<T>/RwLock<T>:Sync,用于并发。 2. 至此,并发的核心安全基石已搭好。后续可进入线程池、通道模式、异步运行时(Tokio)、并发数据结构的系统实践。

    21010编辑于 2025-12-16
  • 来自专栏Rust语言学习交流

    Rust日报】 2019-09-10:博客文章- Futures并发

    Eclipse IDE支持Rust开发 在Eclipse Corrosion中支持Rust应用程序开发。 详细信息 Rust编写操作系统,8月更新 详细信息参见博客。 博客文章:Futures并发 通常,当你运行Futures时,你可以通过以下三种方式之一调度它们: 运行一个future,并等待它完成。 运行多个futures,并等待所有完成。 第一种调度方式是“顺序”的,后两种调度方法是“并发”的,并且具有细微的差别。 在这篇文章中,讨论了Rust中fallible和infallible异步并发的挑战,将其与两种不同语言的方法进行了比较,并通过一个模型涵盖了所有案例。 论坛: 支持rss Rust Force: 支持rss 微信公众号:Rust语言学习交流

    62430发布于 2019-09-17
领券