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