成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

三大技巧實現Perl性能優化

開發 架構
本文向大家簡單介紹一下Perl性能優化,Perl是強大的語言,是強大的工具,也是一道非常有味道的菜:-)利用很多perl的特性,可以實現一些非常有趣而實用的功能。

本文和大家重點討論一下Perl性能優化,Perl是強大的語言,是強大的工具,也是一道非常有味道的菜:-)利用很多perl的特性,可以實現一些非常有趣而實用的功能。

Perl性能優化

Perl是強大的語言,是強大的工具,也是一道非常有味道的菜:-)利用很多perl的特性,可以實現一些非常有趣而實用的功能。

利用Perl開發一些服務應用時,有時會遇到Perl性能或資源占用的問題,如何解決呢?以下是自己過去開發實踐的一些經驗,幾個主要的技巧分別是:

◆巧用require裝載模塊
◆使用系統函數及XS化模塊
◆自寫低開銷模塊
◆優化正則表達式
◆善用BSDsocket

巧用require裝載模塊

為避免程序一啟動就加載大量模塊,降低啟動速度,可以在必要的時候再裝載模塊,這時候就是require大派用場的時候了。
如:

  1. #!/usr/bin/perl-w  
  2. usepre_load_module;  
  3.  
  4. #Initializesomething  
  5. init_args();  
  6.  
  7. #if$use_this_moduleistrue,loadtheModule  
  8. if($use_this_module){  
  9. requireModule;  
  10. }  

上述代碼中,如果變量$use_this_module設置了,那么才加載Module,如果沒設置則不需要加載,實現了:useondemand的功能。在CGI應用程序中,這相當有用,如果每次請求(fork)都加載大量無用模塊的話,響應速度會有所降低,而在特定場合才加載一些模塊將加塊啟動、解析的速度。

再看一個例子:
 

  1. #!/usr/bin/perl  
  2. my$pid=forkordie"can'tfork:$!\n";  
  3. if($pid){  
  4. print"i'mfather\n";  
  5. sleep;  
  6. }else{  
  7. print"i'mchild\n":  
  8. requireIO::Socket;  
  9. sleep;  
  10. }  

上述代碼中,如果在程序一開始就用use來載入IO::Socket模塊,那么子/父進程都加載了該模塊,通過top命令發現子父進程大小都是3.07MB;如果只在子進程里加載,則只在子進程里有效,內存的消耗將降低,top命令發現子進程3.04MB,父進程變為1.4MB。

使用系統函數及XS化模塊

Perl內建的系統函數及用c編寫的perlXS擴展模塊的速度和效率都比純perl的實現要好得多。在Perl性能要求較高的場合(如開發ApplicationServer,NetworkServer等),可以考慮使用這些內建函數或XS化模塊。
如Socket就比IO::Socket的內存消耗要低,XS編寫的Data::Dumper就比純Perl的Data::Dumper要快4-5倍。
此外,一些簡單的任務并沒必要使用Perl模塊,如獲得主機IP地址就大可不必載入龐大的Net::DNS而只是使用gethostbyname()系統函數即可。

以下是一些常用的替代方案以獲得更快的速度,更好的效率:

用sys*系列函數等替代open/seek/tell/<>等標準IO操作
用Socket代替IO::Socket以獲得更低開銷和內存占用
用get*by*系列函數代替Net::DNS
用index/substr等代替部分低效正則表達式
用select(3參數版本)代替IO::Handle部分功能.......

自寫低開銷模塊

通常我們使用一些Perl模塊時,只使用了其中很小一部分的功能,可是卻不得不載入整個模塊,甚至要載入其他不相關的模塊。因此往往使整個程序非常臃腫龐大。
著名的web管理軟件webmin的miniserv(一個簡化的http服務端)功能強大,還支持SSL,但資源占用卻出奇的少,只有大約5.6MB的大小!這是為什么呢?因為miniserver只使用了2個Perl系統模塊(Socket及POSIX),沒有載入其他的模塊。Perl性能優化時一些本需要其他perl模塊的功能,均由web-lib.pl等用系統函數編寫代替。

例如以下是一個獲得A記錄的高速函數get_mx(),它不依賴任何模塊,速度非常快。

  1. subget_mx{  
  2. my@info=gethostbynameshift;  
  3. my@addr=splice(@info,4);  
  4. my@rt;  
  5. foreach(@addr){  
  6. push@rt,join('.',unpack('C4',$_));  
  7. }  
  8. \@rt;  
  9. }  
  10.  

 另一個例子,對于標準的IO::Handle對象,可以使用$obj->autoflush(1);來設置緩沖的特性,我們通過使用系統函數select()來獲得同樣的能力,而無需要載入IO::Handle,代碼如下:

  1. subautoflush{  
  2. my$io=$_[0];  
  3. select((select($io),$|=1)[0]);  

使用方法很簡單,例如要對IO::Socket::INET類型的$sock設置為立即沖刷,則autoflush($sock)即可。
 

【編輯推薦】

  1. 從細節處提升Perl性能
  2. Perl模式匹配參數使用詳解
  3. 實例解析Perl多進程技術的應用
  4. 學習筆記 Perl split函數用法指導
  5. Perl多進程及其和多線程的關系解析

 

 

責任編輯:佚名 來源: csdn.net
相關推薦

2010-07-26 16:35:34

Perl性能

2024-08-06 16:31:32

2014-10-28 16:11:37

AndroidApp性能優化

2011-06-14 10:35:15

性能優化

2009-06-16 16:39:49

Hibernate性能

2010-07-13 09:23:00

Perl變量

2010-07-20 10:48:56

Perl文件操作

2012-07-23 10:22:15

Python性能優化優化技巧

2019-02-25 07:07:38

技巧React 優化

2009-12-09 17:33:22

PHP性能優化

2011-07-11 15:26:49

性能優化算法

2013-06-08 14:19:05

性能優化KVM

2019-08-21 10:53:29

.NET性能優化

2010-07-20 15:54:40

Perl簡單變量

2010-07-29 13:41:57

Flex性能優化

2011-06-14 14:17:23

性能優化系統層次

2011-06-14 11:14:10

性能優化代碼

2024-10-09 23:32:50

2011-06-14 14:32:46

性能優化
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 性做久久久久久免费观看欧美 | 久久免费观看一级毛片 | 中文字幕视频在线 | 成人午夜电影在线观看 | 一区二区三区欧美大片 | 美女在线国产 | 国产日韩欧美激情 | 欧美a v在线 | 日韩中文字幕一区 | 天堂综合网 | 色婷婷av99xx | 视频一区二区在线 | 国产黄色精品在线观看 | 草草视频在线观看 | 中文欧美日韩 | 国产精品国产馆在线真实露脸 | 国产91视频一区二区 | 日韩中文一区二区 | 999久久久精品 | 国产精品久久久久久久久久久免费看 | 精品乱码一区二区 | 色吧综合网 | 中文字幕精品一区二区三区精品 | 久久一区二区三区四区五区 | 国产成人综合在线 | 在线一区二区三区 | 国产精品高潮呻吟久久久久 | 久久99国产精一区二区三区 | 伊人最新网址 | 99久久精品一区二区成人 | 国产伦精品一区二区三区高清 | 亚洲最新在线 | 亚洲综合大片69999 | 日韩在线中文 | 精品福利在线 | 国产91网站在线观看 | 国产精品视频在线观看 | 久久久一区二区三区 | 欧美日韩中文在线观看 | 日韩在线观看网站 | 特黄色一级毛片 |