|
|
1
10
Perl更好的regex实现是故事的一部分。这还不能解释为什么Perl实现更有效。处理器越多,差异就越大。出于某种原因,python实现存在问题。 |
|
|
2
5
Perl对文本处理进行了大量优化。有这么多因素,很难说到底有什么区别。文本在内部的表示方式完全不同(utf-8与utf-16/utf-32),正则表达式引擎也完全不同。python的正则表达式引擎是一个自定义引擎,并没有perl引擎那么多使用。与基本上是“语言核心”的Perl相比,很少有开发人员在开发它(我认为它基本上是未维护的)。 毕竟perl是 这个 文本处理语言。 |
|
|
3
3
Perl已经发布了许多核心引擎(MCE)。mce在这方面做得很好,甚至当使用8个工作线程(冷缓存)直接从磁盘读取数据时也是如此。与wf-mmap进行比较。MCE在读取输入数据时遵循银行排队模型。在“图像”文件夹下查找其中的幻灯片。 源代码托管在 http://code.google.com/p/many-core-engine-perl/ 可以读取Perl文档。 https://metacpan.org/module/MCE 在examples/tbray下提供了一个用mce实现的广角探测器。/ https://metacpan.org/source/MARIOROY/MCE-1.514/examples/tbray/ 享受MCE。
|
|
|
4
1
Perl实现使用 mmap 系统调用。这个调用所做的是建立一个指针,指向进程的指针似乎是指向程序的正常内存段或缓冲区。它将文件内容映射到内存区域。与普通的文件io(read)相比,这样做有一些性能优势,一个是不需要用户空间库调用就可以访问数据,另一个是通常需要较少的复制操作(例如:在内核和用户空间之间移动数据)。 Perl的字符串和正则表达式是基于8位字节的(例如,与Java的UTF16不同),因此Perl的本机“字符类型”与MMaped文件的编码相同。 当正则表达式引擎在mmap支持的变量上运行时,它直接通过mamped内存区域访问文件数据,而不必经过perl的io函数,甚至libc的io函数。 mmap可能在很大程度上导致了与使用普通python io库的python版本相比的性能差异,这还增加了寻找换行符的开销。 perl程序还支持-j来并行化处理,其中oepen“-”会导致fork(),其中父级中的文件句柄是子级的stdout。子进程将其结果序列化为stdout,父进程将其反序列化以协调和汇总结果。 |
|
|
5
0
这个。它避免了缓冲区复制并提供异步I/O。 |