Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我应该使用Python还是汇编来实现超快速复制程序_Python_Assembly - Fatal编程技术网

我应该使用Python还是汇编来实现超快速复制程序

我应该使用Python还是汇编来实现超快速复制程序,python,assembly,Python,Assembly,作为维护问题,我需要定期(每年3-5次)复制一个存储库,该存储库现在有超过2000万个文件,总磁盘空间超过1.5 TB。我目前正在使用RICHCOPY,但已经尝试过其他方法。RICHCOPY似乎是最快的,但我不相信我正在接近XP机器的能力极限 我在玩弄我在汇编语言艺术中读到的东西,写一个程序来复制我的文件。我的另一个想法是开始学习如何在Python中使用多线程进行复制 我一直在玩弄在汇编中这样做的想法,因为它看起来很有趣,但虽然我的时间并不十分宝贵,但我正试图弄清楚我是否能在复制速度方面看到足够

作为维护问题,我需要定期(每年3-5次)复制一个存储库,该存储库现在有超过2000万个文件,总磁盘空间超过1.5 TB。我目前正在使用RICHCOPY,但已经尝试过其他方法。RICHCOPY似乎是最快的,但我不相信我正在接近XP机器的能力极限

我在玩弄我在汇编语言艺术中读到的东西,写一个程序来复制我的文件。我的另一个想法是开始学习如何在Python中使用多线程进行复制

我一直在玩弄在汇编中这样做的想法,因为它看起来很有趣,但虽然我的时间并不十分宝贵,但我正试图弄清楚我是否能在复制速度方面看到足够大的进步。我想我会的,但我才真正开始学习编程18个月,它仍然或多或少是一种爱好。因此,我可能遗漏了解释语言的一些基本概念

如有任何意见或经验,将不胜感激。注意,我不是在寻找任何代码。我已经用Python2.6编写了一个基本的复制程序,速度不比RICHCOPY慢。我在寻找一些能让我更快的观察结果。现在,我需要50多个小时才能从磁盘复制到Drobo,然后再从Drobo复制到磁盘。当我只是复制一个磁盘时,我有一个LogicCube,但有时我需要从磁盘转到Drobo或相反的位置。我在想,如果我能在7小时内使用LogicCube对一个3/4全2 TB的驱动器进行扇区复制,那么我应该能够使用Assembly接近这一点,但我不知道这是否有效。(是的,有时无知就是幸福)

我需要加快速度的原因是,我已经经历了两到三个周期,在复制过程中发生了一些事情(50个小时是一个很长的时间,期望世界静止不动),这导致我不得不扔掉复制并重新开始。例如,上周我们大楼下面的总水管破裂,导致电源短路

感谢您的早期回复,但我不认为这是I/O限制。我不是通过网络,驱动器通过sata连接插入我的主板,我的Drobo插入Firewire端口,我的想法是这两种连接都应该允许更快的传输

实际上,除了从一个磁盘到Drobo,我不能使用扇区拷贝。因为Drobo文件结构是个谜,所以它不会以另一种方式工作。我不科学的观察结果是,从一个内部磁盘到另一个磁盘的复制速度并不比从Drobo到内部磁盘的复制速度快

我受硬件的束缚,我买不起10K rpm 2 TB的驱动器(如果他们生产的话)

许多人建议采用文件同步解决方案。但这并不能解决我的问题。首先,我使用的文件同步解决方案首先构建数据地图(因为缺少更好的术语),我有太多的小文件,所以它们会阻塞。我使用RICHCOPY的原因之一是它立即开始复制,它不使用内存来构建映射。第二,几周前我的三个Drobo备份中有一个失败了。我的规则是,如果备份失败,其他两个必须保持离线状态,直到新的备份建立。因此,我需要从LogicCube使用的三个备份单驱动器副本中的一个进行复制

在一天结束时,我必须在一个驱动器上有一个好的拷贝,因为这是我交付给客户的东西。因为我的客户有不同的系统,所以我通过SATA驱动器向他们提供


我从某人那里租用了一些云空间,在那里我的数据也被存储为最深的备份,但如果离开那里的话,花费会很高。

复制文件是一个I/O绑定的过程。在汇编中重写它不太可能加快速度,甚至多线程也可能会导致速度变慢,因为不同的线程同时请求不同的文件会导致更多的磁盘搜索


使用标准工具可能是最好的方法。如果有什么需要优化的地方,你可能需要考虑改变你的文件系统或硬件。

< P>我不相信你会用哪种语言来达到这个目的。这里的瓶颈不是应用程序,而是磁盘性能

仅仅因为一种语言被解释,并不意味着它的每一个操作都很慢。例如,Python中较低级别的代码将调用汇编(或编译)代码进行复制,这是一个相当安全的赌注

类似地,在Java中处理集合和其他库时,大部分都是编译的C,而不是解释的Java

你可以做一些事情来加速这个过程

  • 购买更快的硬盘(10K RPM而不是7.5K或更低的延迟,更大的缓存等等)
  • 在两个物理磁盘之间复制可能比在单个磁盘上复制快(由于磁头移动)
  • 如果您要通过网络进行复制,请将其暂存。换言之,将其快速复制到另一个本地磁盘,然后通过网络从那里缓慢复制
  • 你也可以用一种不同的方式来展示它。如果您每夜(甚至每周一次)运行一次过程来保持副本的最新状态(仅复制更改的文件),而不是一年三次,那么您将不会发现自己需要复制大量副本
  • 此外,如果您正在使用网络,请在存储库所在的框中运行它。您不希望将所有数据从远程磁盘复制到另一台PC,然后再复制回另一个远程磁盘
您可能还需要小心使用Python。我可能弄错了(毫无疑问,如果我在这一点上弄错了,蟒蛇会纠正我的错误),但我模糊地记得,它的线程可能不会
time dd if=/dev/zero of=/dev/sdc bs=1024k count=100