两种语言的例程都很便宜。:goroutines每个进程为2KB,而Elixir进程每个进程为0.5KB。
我理解在横梁中启动进程需要0.5KB内存。在灵丹妙药和Erlang的情况下,这是如此轻量级,而在去的情况下,使用这些运行时似乎是相对于依赖自己的其他语言的优势,而不是依赖于廉价的进程和线程,或者在底层操作系统上的S进程和线程(据说也需要更多内存)。
我想知道在基于Linux的系统上启动进程需要多少内存。我知道内存的使用取决于进程正在做什么。但是,我假设,仅仅启动一个不做任何操作的进程是有内存开销的)。那要多少钱?
我在哪里能读到更多关于它的资料?有什么文件/命令可以用来检查吗?
发布于 2022-06-30 12:12:34
在Linux上,任何线程或进程在内核中至少要花费一个task_struct;在我的系统中,pahole task_struct告诉我这需要花费9,344字节。在用户空间中,线程还需要为其分配堆栈,但实际成本将取决于它实际使用的堆栈空间(因为只有被触摸的页面才会被分配)。
您可以在man pthread_attr_init和pthread_create中使用示例程序。后者特别允许您控制堆栈大小和创建线程的数量,这意味着可以通过运行单个线程并测量其使用的内存量来估算用户空间中单个线程的成本。GNU time平均运行了很多次,这表明在这个特定的场景中,每个线程需要48 with的代价,其中有一个64 with堆栈。
分叉比较昂贵,因为这涉及为进程创建一个新的地址空间,并在内核和页表条目中使用相关的结构。
https://unix.stackexchange.com/questions/708104
复制相似问题