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

Perl性能優(yōu)化的三大技巧

開發(fā) 后端
你對(duì)Perl性能優(yōu)化的概念是否熟悉,Perl是強(qiáng)大的語言,是強(qiáng)大的工具,也是一道非常有味道的菜:-)利用很多perl的特性,可以實(shí)現(xiàn)一些非常有趣而實(shí)用的功能。

本文和大家重點(diǎn)討論一下Perl性能優(yōu)化技巧,利用Perl開發(fā)一些服務(wù)應(yīng)用時(shí),有時(shí)會(huì)遇到Perl性能或資源占用的問題,可以巧用require裝載模塊,使用系統(tǒng)函數(shù)及XS化模塊,自寫低開銷模塊等來優(yōu)化Perl性能。

Perl性能優(yōu)化

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

利用Perl開發(fā)一些服務(wù)應(yīng)用時(shí),有時(shí)會(huì)遇到Perl性能或資源占用的問題,如何解決呢?以下是自己過去開發(fā)實(shí)踐的一些經(jīng)驗(yàn),幾個(gè)主要的技巧分別是:

◆巧用require裝載模塊
◆使用系統(tǒng)函數(shù)及XS化模塊
◆自寫低開銷模塊
◆優(yōu)化正則表達(dá)式
◆善用BSDsocket

巧用require裝載模塊

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

  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. }  
  11.  

 上述代碼中,如果變量$use_this_module設(shè)置了,那么才加載Module,如果沒設(shè)置則不需要加載,實(shí)現(xiàn)了:useondemand的功能。在CGI應(yīng)用程序中,這相當(dāng)有用,如果每次請(qǐng)求(fork)都加載大量無用模塊的話,響應(yīng)速度會(huì)有所降低,而在特定場合才加載一些模塊將加塊啟動(dòng)、解析的速度,提高Perl性能。

再看一個(gè)例子:

  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模塊,那么子/父進(jìn)程都加載了該模塊,通過top命令發(fā)現(xiàn)子父進(jìn)程大小都是3.07MB;如果只在子進(jìn)程里加載,則只在子進(jìn)程里有效,內(nèi)存的消耗將降低,top命令發(fā)現(xiàn)子進(jìn)程3.04MB,父進(jìn)程變?yōu)?.4MB。

使用系統(tǒng)函數(shù)及XS化模塊

Perl內(nèi)建的系統(tǒng)函數(shù)及用c編寫的perlXS擴(kuò)展模塊的速度和效率都比純perl的實(shí)現(xiàn)要好得多。在Perl性能要求較高的場合(如開發(fā)ApplicationServer,NetworkServer等),可以考慮使用這些內(nèi)建函數(shù)或XS化模塊。

如Socket就比IO::Socket的內(nèi)存消耗要低,XS編寫的Data::Dumper就比純Perl的Data::Dumper要快4-5倍。
此外,一些簡單的任務(wù)并沒必要使用Perl模塊,如獲得主機(jī)IP地址就大可不必載入龐大的Net::DNS而只是使用gethostbyname()系統(tǒng)函數(shù)即可。

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

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

自寫低開銷模塊

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

例如以下是一個(gè)獲得A記錄的高速函數(shù)get_mx(),它不依賴任何模塊,速度非常快,可以提高Perl性能。

  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;  

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

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

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

【編輯推薦】

  1. 從細(xì)節(jié)處提升Perl性能
  2. 三大技巧實(shí)現(xiàn)Perl性能優(yōu)化
  3. 實(shí)例解析Perl多進(jìn)程技術(shù)的應(yīng)用
  4. 學(xué)習(xí)筆記 Perl split函數(shù)用法指導(dǎo)
  5. Perl多進(jìn)程及其和多線程的關(guān)系解析

 


 

責(zé)任編輯:佚名 來源: chinaunix.net
相關(guān)推薦

2010-07-26 12:50:45

Perl性能

2024-08-06 16:31:32

2014-10-28 16:11:37

AndroidApp性能優(yōu)化

2019-08-21 10:53:29

.NET性能優(yōu)化

2011-06-14 10:35:15

性能優(yōu)化

2009-06-16 16:39:49

Hibernate性能

2010-07-13 09:23:00

Perl變量

2010-07-20 10:48:56

Perl文件操作

2011-07-11 15:26:49

性能優(yōu)化算法

2013-06-08 14:19:05

性能優(yōu)化KVM

2012-07-23 10:22:15

Python性能優(yōu)化優(yōu)化技巧

2019-02-25 07:07:38

技巧React 優(yōu)化

2009-12-09 17:33:22

PHP性能優(yōu)化

2009-11-27 13:24:20

PHP代碼性能優(yōu)化

2022-10-09 13:36:44

接口性能優(yōu)化

2010-07-20 15:54:40

Perl簡單變量

2024-01-22 13:16:00

接口性能優(yōu)化本地緩存

2011-06-14 14:17:23

性能優(yōu)化系統(tǒng)層次

2010-07-19 15:37:48

Perl日期時(shí)間
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 欧美中文字幕一区二区三区 | 日韩淫片免费看 | 免费国产视频在线观看 | 久久国产视频一区 | 久久久久一区二区 | 精品日韩电影 | 中文字幕欧美在线观看 | 蜜桃臀av一区二区三区 | 日韩精品在线观看免费 | 免费久久99精品国产婷婷六月 | 日韩av一区二区在线 | 国产福利小视频 | 亚洲福利一区二区 | 在线中文字幕国产 | 大象视频一区二区 | 天天插天天操 | 99日韩| 美女视频一区二区三区 | 毛片a区| 91亚洲精品久久久电影 | 日韩视频在线观看一区二区 | 伊人网在线看 | 久久精品二区亚洲w码 | 国产电影一区二区三区爱妃记 | 亚洲天堂一区 | 国产亚洲精品久久久久久牛牛 | 91国语清晰打电话对白 | 男女深夜网站 | 成人午夜影院 | 成人福利| 久草.com | 欧美高清视频一区 | 国产在线视频一区二区 | 国产视频精品区 | 四虎影院在线免费观看 | 久久的色 | 国产精品久久久久久吹潮 | 曰韩一二三区 | 亚洲狠狠 | 日本不卡免费新一二三区 | 日韩欧美国产一区二区 |