在一些用例中,我不能拥有大量的ram,有时由于基于坞的服务并不总是提供超过512 if /1GB的ram,或者如果我运行多个基于锈蚀的gui应用程序,如果每个应用程序通常占用100 if的ram,那么如何实现swapfile/虚拟ram以超过分配的ram呢?另外,os级别的swapfile不允许用户选择哪个应用程序可以使用真正的ram和哪个swapfile,因此它也可能成为一个问题。我想尽可能多地使用swapfile,如果可能的话,甚至不使用真正的ram。用户和托管服务通常提供大量的存储(通常超过10 of ),所以这也是使用可用存储的好方法!如果swapfile或类似的东西不可能,我想知道“ram中的缓存数据”应用程序和“在文件中缓存数据并在需要时读取”应用程序在速度和cpu消耗上是否有任何差异。如果后者在正常情况下是缓慢的,并且没有swapfile那么高效,我想知道os如何设法使swapfile比应用程序更高效。
发布于 2022-04-24 14:35:55
应用程序不控制它们分配的内存是在实际RAM上分配的,还是在交换分区上分配的,或者是其他的。您只需要内存,操作系统负责找到可用的内存给您。
此外,请注意,使用交换(有时称为交换)是极其糟糕的性能。多少在很大程度上取决于你的硬件,但它大约是三个数量级。如果您正在与用户交互,这甚至会被放大:如果程序需要等待一分钟才能获得资源,而不是几毫秒,因为系统负载很重,那么获取某些资源的程序就不会太麻烦,但用户通常不会有这种耐心。
还请注意,在交换时,操作系统不会选择哪个应用程序获得更快的RAM,哪个应用程序可以随机地获得交换内存。它将试图根据配置的方式(至少对于Linux内核)来确定哪个应用程序的优先级,等等,因此在现实中,最终由用户来决定哪些应用程序获得最多的RAM (当然,当然:每次内核不得不通过一个小的弹出来做出决定时都不会提示它们.)。
最后,现代操作系统允许多个应用程序分配重叠内存,只要每个应用程序没有充分使用它所要求的内存(这是一种常见的),您就可以运行理论上需要更多RAM的应用程序。
这是在OS部分:现在是应用程序部分。通常,当您编写一个程序(其目的与RAM无关)时,您不应该真正关心内存的消耗(直到某一点),特别是在Rust中。这不仅是操作系统处理的,以防你使用了太多的内存,而且在可能的情况下,大多数人更愿意用更多的内存(甚至更多)来换取更好的CPU性能,因为RAM比CPU便宜得多。
当然,也有一些例外,在这种情况下,内存消耗太高,以至于你真的不能不注意。在这些情况下,要么让用户处理这个问题(即。众所周知,这个应用程序消耗了大量内存,因为没有其他方法可以做到这一点,所以如果您想使用它,只需要使用大量内存),或者您重新思考您的应用程序以降低内存使用,以换取一定的CPU效率,例如,当您处理的图形太大以至于无法将它们存储到世界上的所有硬盘上时(在这种情况下,您的应用程序必须聪明到能够处理图形的小部分),或者您最终使用的是一个大资源,但它可以存储在硬盘上,因此,您只需将其写入文件并按块访问它,就像一些数据库管理器所做的那样。
https://stackoverflow.com/questions/71988747
复制相似问题