【发布时间】:2011-11-09 06:21:53
【问题描述】:
我刚刚写了一个关于caching 的问题,这让我开始思考。使用具有严格 API 的服务器进程是否比静态链接的服务器库慢(可能在其自己的线程中)?
如果速度较慢,有多少开销? 操作系统是 linux,但我的大部分开发和测试都是在 windows 上。
【问题讨论】:
标签: linux multithreading process
我刚刚写了一个关于caching 的问题,这让我开始思考。使用具有严格 API 的服务器进程是否比静态链接的服务器库慢(可能在其自己的线程中)?
如果速度较慢,有多少开销? 操作系统是 linux,但我的大部分开发和测试都是在 windows 上。
【问题讨论】:
标签: linux multithreading process
是的,它比较慢,因为它涉及上下文切换和复制数据的额外工作。这就是 SQLite 受欢迎的原因之一。
至于多少开销,“视情况而定”,但答案可能是“不足以成为您的问题”。与往常一样,如果有疑问,唯一要做的就是尝试两种方法并对其进行基准测试/分析。
【讨论】:
视情况而定。
我认为上下文切换在 Linux 中的线程和进程之间并没有什么不同。然而:
启动一个新进程(例如使用 posix_spawn 或 fork/exec)比启动一个新线程慢,因为您必须加载一个新的进程映像,它会调用动态链接器并执行其他操作
多进程系统可以使用比多线程系统更多的内存 - 有时 - 取决于您共享的数据结构。这当然会影响性能,从而减少其他事情的内存。
“fork 但不执行”的进程位于进程和线程“之间”的某个位置。然而,它们也有自己的问题(例如,如果许多库与另一个进程共享文件描述符,它们就会变得混乱)。
【讨论】: