[英]Regular expressions performance: Boost vs. Perl
我正在尋找perl和boost正則表達式之間的性能比較。
我需要設計一段非常依賴正則表達式的代碼,並且可以在以下兩者之間進行選擇:
我知道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.