【问题标题】:Effect of fork() and pthread_create on VSZfork() 和 pthread_create 对 VSZ 的影响
【发布时间】:2013-10-21 08:44:49
【问题描述】:

我正在使用 C 编写的嵌入式 http 服务器,该服务器最初使用 fork() 来处理每个客户端请求。 我将其切换为使用 pthread_create 而不是 fork()。

在比较内存使用情况时,我观察到了上面列出的 %VSZ 利用率的变化。 fork() 版本报告的 %VSZ 高于 pthread_create()。

谁能解释为什么会出现这种变化,因为据我所知,我所做的所有更改都与创建线程有关。我无法确定它是如何改变进程的虚拟内存大小的。

【问题讨论】:

  • @Jeyaram :我已经阅读了上面的帖子,但它没有回答我的问题。我在这里的关注仅限于一个事实,如果一个程序刚刚启动:现在没有请求,它应该有几乎相同的 VSZ

标签: c linux multithreading memory fork


【解决方案1】:

基本上fork()创建另一个进程,这意味着它被分配了自己的内存空间,这意味着你使用的内存成倍增加。

另一方面,线程与创建它的进程共享其内存空间,因此您的内存使用量会小得多,但如果您从多个线程访问同一个变量,您必须担心竞争条件和死锁。 (除非您使用共享内存结构,否则不会发生在进程中)

【讨论】:

  • 由于任何健全的操作系统内核在分叉进程时都实现了“写入时复制”,因此大部分地址空间都与父进程共享。所以你不能添加虚拟地址空间的大小来获得使用的总内存。
猜你喜欢
  • 2023-03-04
  • 1970-01-01
  • 2021-02-06
  • 1970-01-01
  • 2011-05-18
  • 2013-09-05
  • 2011-04-15
  • 1970-01-01
相关资源
最近更新 更多