0

我最近开始研究一个使用熟悉的Master-Worker模式设计的服务器应用程序,其中一个特权线程管理多个工作线程。我现在意识到线程真的很麻烦。

我现在正在考虑转移到进程而不是线程的可能性,因为它们解决了我遇到的很多问题。

然而,性能是一个主要问题,我担心由于重复数据(查找表、上下文数据等)争夺 L2/L3 缓存中的空间而导致内存使用量增加,性能会下降。这些数据需要偶尔修改,并且可能会变得非常大。

hash_table files; 

function serve_file(connection, path)
    file = hash_table[path]
    sendfile(connection.fd, file.fd, 0, file.size);

function on_file_added_to_server_root(which)
    files.add(which, ...)

给定N工作进程,如果有N这张表的副本,那就太可惜了。但是,有些表可以完美地复制到任何地方。但是也有许多malloc(3)可能被共享的分配内存,但可能分散在各处,导致随机页面由于写时复制而被复制。

是否有任何技巧或一般策略可以在多进程设计中保持内存使用紧密?

谢谢!

4

0 回答 0