进程是否比线程慢

时间:2011-11-09 06:21:54

标签: linux multithreading process

我刚刚写了一篇关于caching的问题,这让我想到了。使用具有严格API的服务器进程比服务器lib静态链接(可能在其自己的线程中)慢吗?

如果速度较慢,那么有多少开销? 操作系统是Linux,但我的大多数开发和测试都在Windows上。

2 个答案:

答案 0 :(得分:2)

是的,它较慢,因为它涉及上下文切换和复制数据的额外工作。这就是为什么SQLite很受欢迎的一个原因。

至于多少开销,“这取决于”,但答案很可能“不足以成为你的问题”。一如既往,如果有疑问,唯一要做的就是尝试两种方式并对它们进行基准测试。

答案 1 :(得分:1)

取决于。

我认为在线程和进程之间的Linux中,上下文切换并没有什么不同。但是:

  • 启动一个新进程(例如使用posix_spawn或fork / exec)比启动一个新线程要慢,因为你必须加载一个新的进程映像,它调用动态链接器,然后执行其他操作

  • 多进程系统可以使用比多线程更多的内存 - 有时 - 取决于您共享的数据结构。这当然会影响性能,让您减少其他内存的记忆。

“fork但不执行”的进程是“介于”进程和线程之间的某个位置。然而,他们遇到了自己的问题(例如,如果他们与另一个进程共享文件描述符,许多库会变得混乱。)