我正在编写一些脚本来收集来自多个服务器的数据,这个数字会增长,并且我会尝试将来证明我的脚本,但是我有点卡住了。
所以首先我有一个脚本在mysql数据库中查找IP,然后连接到每个服务器获取一些信息,然后再将它放入数据库。
我一直认为这是有限的时间来做这个,如果我有100台服务器,需要一点时间去每个服务器获取信息,然后将其推送到数据库。所以我想过在perl中使用fork或thread吗?
在我的情况下哪个会是首选?有没有人有任何例子?
谢谢!
编辑:好的,所以需要更多的信息:我在Linux上运行,我认为我可以获得主脚本来收集数据库信息,然后发送每个子进程/任务来连接和收集信息然后推送信息回到数据库。
答案 0 :(得分:4)
哪个最好取决于你的需求;但是我的经验是值得的:
上次我使用perl的帖子时,我发现它实际上比分叉更慢,更有问题,因为:
要注意的一个陷阱是“forks”库,它模拟“线程”但使用真正的分叉。我在这里遇到的问题是它模仿的许多行为正是我试图摆脱的。我最终使用了经典的老式“fork”并使用套接字在需要的地方进行通信。
forks(库,而不是fork命令)的问题:
答案 1 :(得分:3)
分叉比线程更“资源安全”(想想数据库模块等),所以你可能想要走这条路。
另一方面,根据您选择的平台,您可能希望避免使用Perl中的fork()
。引自perlfork(1):
Perl提供了一个fork()关键字 对应于Unix系统调用 同名。在大多数类Unix上 fork()系统调用的平台 可用,Perl的fork()简单 叫它。
在某些平台上,例如Windows fork()系统调用不在哪里 可用,Perl可以构建 在解释器上模拟fork() 水平。虽然模拟是 旨在兼容 可能与真正的fork()在 Perl程序的级别,有 某些重要的差异 源于所有伪的事实 以这种方式创造的子“过程” 生活在同样真实的过程中 就操作系统而言。