线程与使用共享内存的任务有何不同?

很多人会问一个显而易见的问题:线程与使用共享内存的 fork 有什么区别?希望这些表格能帮助您理解其中的差异。

线程

共享内存 线程自然拥有共享数据区域。
非固有的。没有保护。这才是真正的强大之处:您只需锁定您想要拥有的内容。
切换 快速。由于数据是固有共享的,上下文切换无需刷新所有内存管理缓冲区。在其他系统(非 Linux)上,这可能非常快。但是,我必须指出,Linux 与 NT 和其他系统的基准测试清楚地表明 Linux 在上下文切换方面处于领先地位。私有数据 - 不存在这种东西。如果您使用共享的数据和堆栈进行 clone(),则所有后续内存分配都可以被其他线程看到。一个行为良好的程序自然会对此进行遮蔽,使其不成问题。
SMP 线程将确保 100% 紧密耦合的 SMP。您的程序始终可以在不同平台上运行。

使用共享内存的 Fork

共享内存 必须专门创建和初始化。
有些固有的。您必须授予/获取写入块的权限。这是通过“整个块”完成的——您不能拥有一个共享内存块并且只锁定其中的一部分。
切换 完全上下文重载。这很糟糕。私有数据 - 固有的。
SMP 如果不是 100% 紧密耦合的 SMP,可能会导致问题。您实际上可以让您的程序在分布式系统(通过网络)上运行。因此,共享内存调用将失败,因为任务将不会讨论共享内存 ID。在分布式系统上,您无法 100% 确保相同的内存处理(您的进程可能会迁移到网络上未使用的 CPU)。


[Left Arrow]

[Home]

[Book Search]

[Mailbox]

[Right Arrow]

[上一页] [首页] [词典] [电邮作者] [下一页]