首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否使用相同的内存地址反复调用“写”允许硬件缓存?

是否使用相同的内存地址反复调用“写”允许硬件缓存?
EN

Stack Overflow用户
提问于 2016-05-11 16:05:01
回答 1查看 108关注 0票数 1

我读过一些关于Elixir和Erlang如何使用硬件的性能声明,我正在试图了解它们的基础。一些背景:

首先,Erlang支持将不可变字符串(Iolist)的嵌套列表(Iolist)写入IO (文件、套接字等),并使用writev和字符串的内存地址(请参阅Evan Miller的博客文章)。

其次,一个名为芝加哥老板的Erlang web框架的文档说:

Erlang尊重你的RAM! Erlang不同于其他平台,因为当呈现服务器端模板时,它不会为每个连接的客户端创建单独的网页副本。相反,它在多个请求中构造指向相同不可变内存段的指针。 因此,如果两个人同时请求两个不同的配置文件页,它们实际上被发送给页眉、页脚和其他共享模板片段的相同内存块。其结果是一台服务器可以为数百名用户每秒构建复杂的、非缓存的网页,而无需费力。

第三,一本关于名为凤凰的Elixir (Erlang ) web框架的书说:

模板是预编译的。菲尼克斯不需要为每个呈现的模板复制字符串。在硬件级别上,您将看到缓存在这些字符串中发挥作用,而这些字符串在之前从未使用过。

通过查看源代码,我知道这个框架使用iolist来表示一个完整的响应模板。

把所有这些加在一起,--我认为隐含的是,如果一个web框架使用writev告诉操作系统从相同的内存位置发送相同的页眉和页脚字符串,一个又一个的web请求,硬件将能够说:“哦,我知道这个值,它已经在CPU缓存中了,所以我不必在内存中查找它。”

是对的吗?(我对系统调用和硬件了解很少)。如果没有,对于如何涉及硬件缓存,有什么想法吗?

(如果你能告诉我怎么看或推断出发生了什么,那就更好了。)

EN

回答 1

Stack Overflow用户

发布于 2016-05-13 04:32:39

是的,帮助你的主要是处理器缓存。检索数据所需的时间更短,因为它在更快的内存中(即CPU缓存)。

理解缓存是什么以及它们是如何工作的一些提示:

要查看这一点,请度量请求在正常服务器操作中所花费的时间(客户端)。在此之后,在同一个vm中有一个单独的进程,不断地创建一个非常大的字符串并将其写入磁盘(它的大小可能必须是on -不管进程上L2/L3缓存的大小如何)。重新测量请求所需的时间--如果操作正确,则至少要慢一个数量级。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37167918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档