Rust 程序设计语言 简体中文版 1.85.0指向的堆空间。 在其他一些语言中的某些类型,我们不得不记住在每次使用完那些类型的智能指针实例后调用 清理内存或资源的代码。常见示例包括文件句柄(file handles)、套接字(sockets)和锁 (locks)。如果忘记的话,运行代码的系统可能会因为负荷过重而崩溃。在 Rust 中,可以指定 每当值离开作用域时被执行的代码,编译器会自动插入这些代码。于是我们就不需要在程序中 到处编写在实例结束时清理这些变量的代码 功能并不是一件容易的事。通常也不需要禁用 drop ;整个 Drop trait 存在的意义在于其是自动处理的。然而,有时你可能需要提早清理某个值。一个例子是当 使用智能指针管理锁时;你可能希望强制运行 drop 方法来释放锁以便作用域中的其他代码可 以获取锁。Rust 并不允许我们主动调用 Drop trait 的 drop 方法;当我们希望在作用域结束之 前就强制释放变量的话,我们应该使用的是由标准库提供的 std::mem::drop 助:举 个例子,让我们来看看互斥器(mutexes),较为常见的共享内存并发原语之一。 使用互斥器实现同一时刻只允许一个线程访问数据 互斥器(mutex)是互相排斥(mutual exclusion)的缩写,因为在同一时刻,它只允许一个 线程访问数据。为了访问互斥器中的数据,线程首先需要通过获取互斥器的锁(lock)来表明 其希望访问数据。锁是一个数据结构,作为互斥器的一部分,它记录谁有数据的专属访问权。0 码力 | 562 页 | 3.23 MB | 26 天前3
TGT服务器的优化线程也要使用这些数据,多线程冲突,数据一 致性问题就来了对TGT的性能优化(续) • 为每一个target增加一把锁 • Target event loop (TEL)线程和管理面线程使用这把锁互斥 • TEL在运行时锁住这把锁,管理面只能等待,等TEL线程进入epoll wait状 态,会释放这把锁,管理面可以增删改target信息。 • 不需要target list lock • 因为TEL线程 因为TEL线程只存取自己负责的target,不存取别的target,所以TEL线程 不需要target list lock。 • 管理面是单线程,只有它遍历target list,没有需要互斥的情况。FIO性能测试(配置) • [global] • rw=randread • direct=1 • iodepth=128 • ioengine=aio • bsrange=16k-16k • runtime=600 码力 | 15 页 | 637.11 KB | 6 月前3
Comprehensive Rust(简体中文) 20241261.1 Arc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314 61.2 互斥器(Mutex) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315 8 61.3 示例 . . . • 裸机:为期一天的课程,介绍如何使用 Rust 进行裸机(嵌入式)开发。课程内容涵盖微控制器和应用 处理器。 • 并发:为期一天的课程,介绍 Rust 中的并发性。我们将涵盖传统并发(使用线程和互斥锁进行抢占 式调度)和 async/await 并发(使用 futures 进行协作式多任务处理)。 非目标 Rust 是一门庞大的语言,短短几天的课程无法覆盖其全部内容。本课程不包括以下内容: 有一些独特的卖点: 23 • 内存安全:在编译时可防止所有类内存 bug – 不存在未初始化的变量。 – 不存在“双重释放”。 – 不存在“释放后使用”。 – 不存在 NULL 指针。 – 不存在被遗忘的互斥锁。 – 不存在线程之间的数据竞争。 – 不存在迭代器失效。 • 没有未定 的运行 行 :每个 Rust 语句的行为都有明确定义 – 数组访问有边界检查。 – 整数溢出有明确定义(panic 或回绕)。0 码力 | 359 页 | 1.33 MB | 10 月前3
Python 标准库参考指南 3.11.10 . . . . . . . . . . . . . . 866 ix 17.1.3 锁对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 868 17.1.4 递归锁对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 874 17.1.10 在 with 语句中使用锁、条件和信号量 . . . . . . . . . . . . . . . . . . . . . . . . . . . 876 17.2 multiprocessing --- 基于进程的并行 • re.S (点号匹配所有字符) • re.U (Unicode 匹配) • re.X (详细) (这些旗标在模块内容 中有介绍。) 字母 'a', 'L' 和 'u' 在用作内联旗标时是互斥的,所以它们不能相互组合或者带 '-'。相反,当它 们中的某一个出现于内联的分组时,它将覆盖外层分组中匹配的模式。在 Unicode 模式中 (?a:...) 将切换至仅限 ASCII 匹配,而 (0 码力 | 2399 页 | 11.19 MB | 9 月前3
Python 标准库参考指南 3.11.10 . . . . . . . . . . . . . . . . . 808 17.1.3 锁对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 810 17.1.4 递归锁对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 816 17.1.10 在 with 语句中使用锁、条件和信号量 . . . . . . . . . . . . . . . . . . . . . . . . . 817 17.2 multiprocessing --- 基于进程的并行 . . • re.S (点号匹配所有字符) • re.U (Unicode 匹配) • re.X (详细) (这些旗标在模块内容 中有介绍。) 字母 'a', 'L' 和 'u' 在用作内联旗标时是互斥的,所以它们不能相互组合或者带 '-'。相反, 当它们中的某一个出现于内联的分组时,它将覆盖外层分组中匹配的模式。在 Unicode 模式中 (?a:...) 将切换至仅限 ASCII 匹配,而 (0 码力 | 2248 页 | 11.10 MB | 9 月前3
Python 标准库参考指南 3.7.13 文件将从目录继承其分组 ID,而不是从创建进程的有效分组 ID 继承,并且在其中创建的目录也将设 置S_ISGID 位。对于没有设置分组执行位 (S_IXGRP) 的文件,设置分组 ID 位表示强制性文件/记录锁 定 (另请参见S_ENFMT)。 stat.S_ISVTX 固定位。当对目录设置该位时则意味着此目录中的文件只能由文件所有者、目录所有者或特权进程来 重命名或删除。 stat.S_IRWXU ":memory:" 在内存中打开一个数据库。 当一个数据库被多个连接访问的时候,如果其中一个进程修改这个数据库,在这个事务提交之前,这 个 SQLite 数据库将会被一直锁定。timeout 参数指定了这个连接等待锁释放的超时时间,超时之后会引 发一个异常。这个超时时间默认是 5.0(5 秒)。 isolation_level 参数,请查看Connection 对象的isolation_level 属性。 SQLite 。 此模块所提供的接口与bz2 模块的非常类似。但是,请注意LZMAFile 不是线程安全的,这与bz2.BZ2File 不同,因此如果你需要在多个线程中使用单个LZMAFile 实例,则需要通过锁来保护它。 exception lzma.LZMAError 当在压缩或解压缩期间或是在初始化压缩器/解压缩器的状态期间发生错误时此异常会被引发。 13.4.1 读写压缩文件 lzma.open(filename0 码力 | 1961 页 | 9.14 MB | 9 月前3
Python 标准库参考指南 3.7.13 ":memory:" 在内存中打开一个数据库。 当一个数据库被多个连接访问的时候,如果其中一个进程修改这个数据库,在这个事务提交之前, 这个 SQLite 数据库将会被一直锁定。timeout 参数指定了这个连接等待锁释放的超时时间,超时之 后会引发一个异常。这个超时时间默认是 5.0(5 秒)。 isolation_level 参数,请查看Connection 对象的isolation_level 属性。 390 此模块所提供的接口与bz2 模块的非常类似。但是,请注意LZMAFile 不是线程安全的,这与bz2. BZ2File 不同,因此如果你需要在多个线程中使用单个LZMAFile 实例,则需要通过锁来保护它。 exception lzma.LZMAError 当在压缩或解压缩期间或是在初始化压缩器/解压缩器的状态期间发生错误时此异常会被引发。 13.4.1 读写压缩文件 lzma.open(filename fd 打开且已连接至 tty 设备(或类 tty 设备),返回 True,否则返回 False。 os.lockf(fd, cmd, len) 在打开的文件描述符上,使用、测试或删除 POSIX 锁。fd 是一个打开的文件描述符。cmd 指定要 进行的操作,它们是F_LOCK、F_TLOCK、F_ULOCK 或F_TEST 中的一个。len 指定哪部分文件需 要锁定。 可用性: Unix。 30 码力 | 1846 页 | 9.09 MB | 9 月前3
Python 标准库参考指南 3.13 . . . . . . . . . . . . . . . . . 858 17.1.3 锁对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 860 17.1.4 递归锁对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 866 17.1.10 在 with 语句中使用锁、条件和信号量 . . . . . . . . . . . . . . . . . . . . . . . . . 867 17.2 multiprocessing --- 基于进程的并行 . . • re.S (点号匹配所有字符) • re.U (Unicode 匹配) • re.X (详细) (这些旗标在模块内容 中有介绍。) 字母 'a', 'L' 和 'u' 在用作内联旗标时是互斥的,所以它们不能相互组合或者带 '-'。相反,当它 们中的某一个出现于内联的分组时,它将覆盖外层分组中匹配的模式。在 Unicode 模式中 (?a:...) 将切换至仅限 ASCII 匹配,而 (0 码力 | 2246 页 | 11.74 MB | 9 月前3
Python 标准库参考指南 3.13 . . . . . . . . . . . . . . . . . 854 17.1.3 锁对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 856 17.1.4 递归锁对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 862 17.1.10 在 with 语句中使用锁、条件和信号量 . . . . . . . . . . . . . . . . . . . . . . . . . 863 17.2 multiprocessing --- 基于进程的并行 . . • re.S (点号匹配所有字符) • re.U (Unicode 匹配) • re.X (详细) (这些旗标在模块内容 中有介绍。) 字母 'a', 'L' 和 'u' 在用作内联旗标时是互斥的,所以它们不能相互组合或者带 '-'。相反,当它 们中的某一个出现于内联的分组时,它将覆盖外层分组中匹配的模式。在 Unicode 模式中 (?a:...) 将切换至仅限 ASCII 匹配,而 (0 码力 | 2242 页 | 11.73 MB | 9 月前3
Python 标准库参考指南 3.10.15 . . . . . . . . . . . . . . . . . 748 17.1.3 锁对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 750 17.1.4 递归锁对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 755 17.1.10 在 with 语句中使用锁、条件和信号量 . . . . . . . . . . . . . . . . . . . . . . . . . 757 17.2 multiprocessing --- 基于进程的并行 . . 文件格式的文件接口,以及相应的原始压缩数据流。 此模块所提供了接口与bz2 模块的非常类似。请注意LZMAFile 和bz2.BZ2File 都 不是线程安全的。, 因此如果你需要在多个线程中使用单个LZMAFile 实例,则需要通过锁来保护它。 exception lzma.LZMAError 当在压缩或解压缩期间或是在初始化压缩器/解压缩器的状态期间发生错误时此异常会被引发。 13.4.1 读写压缩文件 lzma.open(filename0 码力 | 2072 页 | 10.39 MB | 9 月前3
共 56 条
- 1
- 2
- 3
- 4
- 5
- 6













