gpt4 book ai didi

linux - 实现提供比线程更好的隔离但性能相当的 Linux 并发原语是否可行?

转载 作者:IT王子 更新时间:2023-10-29 00:53:39 27 4
gpt4 key购买 nike

考虑以下应用程序:网络搜索服务器在启动时根据从磁盘读取的数据创建大型网页内存索引。一旦初始化,内存中的索引就不能被修改,并且会启动多个线程来为用户查询服务。假设服务器被编译为 native 代码并使用操作系统线程。

现在,线程模型没有提供线程之间的隔离。有缺陷的线程或任何非线程安全代码可能会损坏索引或损坏由其他线程分配并在逻辑上属于其他线程的内存。此类问题很难检测和调试。

理论上,Linux 允许实现更好的隔离。一旦索引被初始化,它占用的内存就可以被标记为只读。线程可以替换为共享索引(共享内存)但除此之外具有单独堆并且不能相互破坏的进程。硬件和操作系统会自动检测到非法操作。不需要互斥锁或其他同步原语。与内存相关的数据竞争已完全消除。

这样的模型在实践中是否可行?你知道任何现实生活中的应用程序做这样的事情吗?或者也许存在一些根本性的困难使得这种模型不切实际?与传统线程相比,您认为这种方法会带来性能开销吗?理论上,使用的内存是相同的,但是否存在一些与实现相关的问题会使速度变慢?

最佳答案

显而易见的解决方案是根本不使用线程。使用单独的进程。由于每个进程与代码和只读结构有很多共同点,因此共享只读数据很简单:根据需要将其格式化以供文件中的内存使用,并将文件映射到内存。

使用这个方案,只有每个进程的变量数据是独立的。代码将被共享,静态初始化的数据将被共享直到写入。如果一个进程崩溃,则对其他进程的影响为零。完全没有并发问题。

关于linux - 实现提供比线程更好的隔离但性能相当的 Linux 并发原语是否可行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12289473/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com