我最近开始研究一个使用熟悉的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)
可能被共享的分配内存,但可能分散在各处,导致随机页面由于写时复制而被复制。
是否有任何技巧或一般策略可以在多进程设计中保持内存使用紧密?
谢谢!