当我在 Perl 中 fork 一个进程时,子进程能否看到其父进程的数据
When I fork a process in Perl, can the child process see its parent's data
假设我正在构建一个网络爬虫,并且我有一个包含所有访问过的 URL 的散列。
当我分叉子进程时,我希望能够从子进程访问已访问 URL 的散列值,但我不想复制散列值,因为它很大并且会耗尽计算机的内存。
当我使用 Parallel::ForkManager 进行分叉并打印在父进程中声明的哈希地址时,当我从父进程和子进程打印时得到相同的地址,例如 HASH(0x7fc59d017f38)
但我想确保数据结构没有被复制到子进程
没有。每个进程都有自己的地址space。 child 的地址 space 开始时是其 parent 的副本,但更改其中任何一个都不会影响另一个。您需要使用多种可能的通信渠道(管道、memcached、数据库、文件等)之一显式交换您想要 "share" 的数据。
假设我正在构建一个网络爬虫,并且我有一个包含所有访问过的 URL 的散列。
当我分叉子进程时,我希望能够从子进程访问已访问 URL 的散列值,但我不想复制散列值,因为它很大并且会耗尽计算机的内存。
当我使用 Parallel::ForkManager 进行分叉并打印在父进程中声明的哈希地址时,当我从父进程和子进程打印时得到相同的地址,例如 HASH(0x7fc59d017f38)
但我想确保数据结构没有被复制到子进程
没有。每个进程都有自己的地址space。 child 的地址 space 开始时是其 parent 的副本,但更改其中任何一个都不会影响另一个。您需要使用多种可能的通信渠道(管道、memcached、数据库、文件等)之一显式交换您想要 "share" 的数据。