gpt4 book ai didi

Linux:在线程中进行像 fadvise 这样的系统调用的最具可扩展性的设计是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:10:49 27 4
gpt4 key购买 nike

我的服务器有以下要求:

1) 每个与服务器的新连接都会触发一系列 N posix_fadvise 调用。2) 每个连接的前几个 fadvise 调用应该尽快发生3) 如果客户进行了重新排序 fadvise 调用的能力后续请求。

我在想:带共享队列的线程池,其中线程池大小约为 100。还有其他建议吗?

最佳答案

假设您正在谈论 POSIX_FADV_WILLNEED:

posix_fadvise 已经是异步的。也就是说,它会启动内核机制以开始在后台对数据进行分页,但它实际上并不等待任何数据被读取。它立即返回。

换句话说,posix_fadvise 已经是一种并发机制,因此生成您自己的线程来调用它是没有意义的。并且没有办法“重新排序”调用,因为一旦将它们交给内核,内核将自行决定如何重新排序磁盘访问。

如果您真的想自己动手,只需让您的线程一遍又一遍地进行阻塞 read() 调用以读取小块(如 8k)。 (也就是说,重复顺序读入同一个 8k 缓冲区。使用同一个缓冲区会将其保存在 L1 缓存中,避免不必要地冲击内存总线。)这将填充页面缓存并让您可以控制它何时发生。

虽然我有点怀疑您的应用程序是否需要这样的机制...

关于Linux:在线程中进行像 fadvise 这样的系统调用的最具可扩展性的设计是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6244523/

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