Perl脚本,使用fork还是线程?
我正在编写一些fo脚本,这些脚本可以从多个服务器收集数据,数量会增加,并且我会尝试用它来验证我的脚本,但是我有点卡住了 首先,我有一个脚本,它在mysql数据库中查找IP,然后连接到每个服务器,获取一些信息,然后再次将其放入数据库 我一直在想的是,这样做的时间有限,如果我有100台服务器,那么每个服务器都需要一点时间来获取信息,然后将其推送到数据库。所以我考虑过在perl中使用fork还是线程 在我的情况下,哪一个是首选的选择?有人举过例子吗 谢谢Perl脚本,使用fork还是线程?,perl,Perl,我正在编写一些fo脚本,这些脚本可以从多个服务器收集数据,数量会增加,并且我会尝试用它来验证我的脚本,但是我有点卡住了 首先,我有一个脚本,它在mysql数据库中查找IP,然后连接到每个服务器,获取一些信息,然后再次将其放入数据库 我一直在想的是,这样做的时间有限,如果我有100台服务器,那么每个服务器都需要一点时间来获取信息,然后将其推送到数据库。所以我考虑过在perl中使用fork还是线程 在我的情况下,哪一个是首选的选择?有人举过例子吗 谢谢 编辑:好的,所以需要更多的信息:我在Linux
编辑:好的,所以需要更多的信息:我在Linux上运行,我想我可以让主脚本收集数据库信息,然后发送每个子进程/任务来连接和收集信息,然后将信息推回到数据库。分叉更“资源安全”(想想数据库模块等等)而不是穿线,所以你可能想走那条路 另一方面,根据您选择的平台,您可能希望避免在Perl中使用
fork()
-ing。引自perlfork(1):
Perl提供了一个fork()关键字
对应于的Unix系统调用
同名。在大多数类Unix上
fork()系统调用
是可用的,Perl的fork()只是
叫它
在某些平台上,如Windows
其中fork()系统调用不可用
可用时,可以将Perl构建为
在解释器上模拟fork()
水平。而仿真是
设计为与其他设备一样兼容
可能是在
Perl程序的级别,有
某些重要的差异
源于所有的伪
以这种方式创建的子“进程”
尽可能地生活在同一个真实的过程中
就操作系统而言
哪一个最好在很大程度上取决于你的需要;但值得一提的是,以下是我的经验: 上次我使用perl的线程时,我发现它实际上比forking更慢,问题也更大,因为:
- 线程复制了所有数据,就像线程一样,但都是预先完成的
- 线程并不总是在退出时清理复杂的资源;造成了一个缓慢的内存泄漏,这在原本打算用作服务器的系统中是不可接受的
- 有几个模块没有干净地处理线程,包括我正在使用的数据库模块,它被严重地弄糊涂了
- 仍然混淆了数据库系统
- 共享变量仍然非常有限
- 重写“fork”命令,导致软件中其他地方出现意外行为
fork
几乎没有问题。