簡體   English   中英

正則表達式性能:Boost與Perl

[英]Regular expressions performance: Boost vs. Perl

我正在尋找perl和boost正則表達式之間的性能比較。
我需要設計一段非常依賴正則表達式的代碼,並且可以在以下兩者之間進行選擇:

  1. 通過Boost正則表達式運行它
  2. 派遣perl解釋器並在perl中進行工作

我知道perl以其優化的字符串處理而聞名。 但是,我找不到提升Boosting正則表達式庫的性能比較。
您知道這樣的比較嗎?
謝謝

從應用程序內部運行Perl解釋器的啟動成本(通過我推測的系統功能)將超過您使用Perl的正則表達式引擎所獲得的任何收益。 例外是,如果您有一個非常復雜的正則表達式,而Perl的正則表達式實現恰好針對其優化,而boost的正則表達式引擎則沒有。

真正的答案是我不知道有任何這樣的比較,但是Perl的正則表達式功能不一定是最快的。 有關某些表達式中擊敗Perl正則表達式的算法的信息,請參見此處

編輯:可以通過鏈接到libperl或使用libPCRE來克服啟動完整的perl解釋器的啟動成本。 如果需要,使用Boost可能會為您提供更多的靈活性和性能調整選項。

最后說明:boost.regex和Perl的regex在性能方面沒有已知的直接比較。 解決方案是同時嘗試這兩種方法,看看哪種方法對OP的特定情況更有效。

(編輯:Boost和PCRE之間現在有了很好的比較。請參見http://www.boost.org/doc/libs/1_41_0/libs/regex/doc/gcc-performance.html

如果您還沒看過的話,那么Great Language Shootout中就有一個regexp基准測試 Perl的排名根本不高。 使用boost::xpressive Boost實現排名第一(在編譯時對表達式進行預編譯)。 但是,這是一個微基准,因此可能不代表一般正則表達式的速度,但仍然值得一看。

出乎意料的是,到目前為止,最快的正則表達式引擎顯然是Google Chrome的V8 JavaScript JIT(僅使用單個CPU內核,在掛鍾時間內幾乎擊敗了GCC)

如果您的正則表達式在編譯時是固定的,則還可以考慮使用Boost.XPressive 它允許將正則表達式編寫為在編譯時進行解析的表達式模板。

從最簡單的解決方案開始。 確定應用程序所需的速度。 然后測量速度。 如果太慢,請嘗試較難的解決方案。 再次測量。 根據需要重復。

盡管我的直覺同意其他大多數回答,即啟動解釋器將花費更多,但您只有在進行測量后才能知道。

有“可能的最快”和“足夠快的應用程序”。 如果已經有了后者,請不要增加復雜性以獲取前者。

除非您的正則表達式非常復雜(順便說一句,Perl的正則表達式引擎的運行速度非常快),否則就像其他人所說的那樣,您的開銷是在解釋器啟動上。 另一方面,您可以運行一個持久的Perl,它很容易提供正則表達式服務器。

如果您確實需要快速,則可以獲取REGEX內容協處理器。 我知道有兩個。 泰坦尼克號生產一系列處理器。 另一種是卡維姆制成的。 最后,LSI收購了一家規模較小的公司,並正在運送一系列正則表達式匹配處理器

這些系統可以並行而不是一次執行數千個正則表達式。 使用它們的最昂貴的部分是將內存移至它們並移回它們,以及處理塊限制等。

但是,如果要考慮性能,則可能需要嘗試一下。

perl解釋器將是固定成本。 如果通過解釋器運行數據節省的時間大大超過了解釋器成本(即,您有很多數據),那么性能將得到提高。

您可能最好在這里使用純C ++,這僅僅是因為進程調用的緣故。

抱歉,我沒有數據。 希望能看到您的測試結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM