中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

perl AnyEvent簡單介紹和入門知識
來源:易賢網 閱讀:1187 次 日期:2014-09-25 10:32:14
溫馨提示:易賢網小編為您整理了“perl AnyEvent簡單介紹和入門知識”,方便廣大網友查閱!

什么是面向事件的編程(事件驅動的編程):

編程中所有的程序是由事件決定 – 可以是由用戶操作(鍵盤,鼠標),也可以是由其他程序和流的到達或者操作系統事件(如網絡數據包到達)來觸發執行.

面向事件編程可以也被定義為,寫一個計算機程序,在其中的代碼(通常程序的功能的頭部)被明確分配應用程序的主回路,其代碼本身由兩部分組成方法:事件和事件處理的代碼。

面向事件的編程通常被應用在三種情況下:

1.創建用戶界面的控制(包括圖形)

2.創建一個基于服務器的應用程序

3.游戲編程時多個對象的管理

我們系統管理時,這種應用在服務器的應用程序中使用面向事件的編程很多,比如用于服務器應用解決10,000個并發連接(所謂 C10k 問題)

AnyEvent 是一個性能非常好的基于事件驅動的程序,有人使用它來解決 C10k 的問題,象平時我們寫的程序,都是基于過程.我們都是先做完事件1-> 然后做事件2->然后做事件3 .這種方式.

但基于事件就完全不一樣了,在主流程中你基本只有一個主體框架,程序的動作觸發都是由事件來驅動.比如我們使用的窗口程序.點最大化最小化,都是基于事件,當接收到了最大化的事件做最大化事件那部分的程序開始運行.不在從頭到尾部來執行.所以我們讀基于事件的程序,最好是畫成思維導圖來幫助我們理解.

基于事件的程序常用到的最大好處是用來做異步,例如,我們要下載 100 個文件,下載完后對這些文件進行處理.可能給每個下載和處理的過程寫成事件,這些事件可以同步運行(關鍵在于網絡連接和進行文件的讀寫 IO 時要等待,事件是給這些等待復用起來).

不知大家了解 Perl 中的 select 這個功能不,就是等到句柄可以讀或者寫的時候,做不同的讀或者寫的操作.事件循環也是一樣.

在整個 AnyEvent 入門中,我們只要關注二個點就行, WATCHERS(監控者) 和 條件變量.

WATCHERS(監控者)

在 select 中,有個角色叫"監控者",就是 select 函數本身.

在 AnyEvent 中不但可以監控 IO 還可以監控別的一些事件.來做不同的處理.我們可以看成這是不斷的盯著某件事情的人

有如下幾個基本的內置的可以用來盯著的事情("監控者").

TIMER : 監控時間,到了一定的條件,然后對不同的時間做不同的事件

I/O: 這個是監控到 IO 是否可以讀寫,然后做相應的事件

IDLE: 空閑時做什么事件

SIGNAL : 監控觀查到不同的信息,調用相應的事件

CHILD PROCESS: 對子程序的狀態來調用相應的處理事件

TIMER WATCHERS

基本語法

代碼如下:

AnyEvent->timer(

after => $seconds, # 多久之后做相應的操作.

interval => $seconds, # 在上面條件生效后,每格多久進行一次 callback.

cb => $cb, # cb 是 callback 的簡寫,所以知道了吧,只要到了前面的條件,就會運行 cb => 指向的函數.

);

使用實例:

下面的例子是,5 秒后,每 2 秒進行一次 callback 中的事件,直到 $w 這個注冊的事件被 undef 為止(也就是 $count > 10 次).這個中的 undef $w 是取消掉這種 watcher 的方法.

代碼如下:

#!/usr/bin/perl

use strict;

use AnyEvent;

my $cv = AnyEvent->condvar;

my $count = 0;

my $w; $w = AnyEvent->timer(

after => 5,

interval => 2,

cb => sub {

$count++;

warn "這是第 $count 次調用";

if ($count >= 10) {

undef $w;

}

}

);

$cv->recv;

I/O WATCHERS

基本語法

代碼如下:

my $fh = ....; # 打開一個句柄

my $io; $io = AnyEvent->io(

fh => $fh, # 上面打開的句柄,也可以是標準輸入和輸出

poll => "w", # 這個地方可以選擇 r 和 w 來表示讀和寫的 IO 事件

cb => sub {

syswrite( $fh, "寫入的內容" );

undef $io;

}

);

使用實例:

下面的例子,是使用 io 監控到可以讀,就調用 cb 的函數,直接讀文件 test.txt,每次一個字節,直到讀完這個文件就通過 undef 消掉這個事件.

代碼如下:

#!/usr/bin/perl

use strict;

use AnyEvent;

my $cv = AnyEvent->condvar;

open my $fh, "<test.txt" or die "不能打開文件句柄 $!";

my $io; $io = AnyEvent->io(

fh => $fh,

poll => "r",

cb => sub {

my $len = sysread( $fh, my $buf, 1 );

if ($len > 0) {

print "read '$buf'\n";

}

else {

undef $io;

die "讀出錯: $!";

}

});

$cv->recv;

IDLE WATCHERS

基本語法

代碼如下:

my $w = AnyEvent->idle (cb => sub { ... });

使用實例:

下面的例子,當整個程序中,沒有其它事件在運行時,就會運行 idle .它就是當其它事件都在等待和空著的時候,所調用的.

代碼如下:

#!/usr/bin/perl

use strict;

use AnyEvent;

my $cv = AnyEvent->condvar;

my $t; $t = AnyEvent->timer(

after => 1,

interval => 1,

cb => sub { print time()."\n" }

);

my $w; $w = AnyEvent->idle(

cb => sub {

warn "idle";

# undef $w;

}

);

$cv->recv;

SIGNAL WATCHERS

基本語法如下,就是當接收到 POSIX signal 的時候,運行 callback 中的事件.

代碼如下:

my $w = AnyEvent->signal (signal => "TERM", cb => sub { ... });

CHILD PROCRSS WATCHERS

基本語法如下

代碼如下:

# child process exit

my $w = AnyEvent->child (pid => $pid, cb => sub {

my ($pid, $status) = @_;

...

});

條件變量(多個條件時)

這個是 AnyEvent 學習上面幾種事件監控后必須要了解的.大家都見到上面有 AnyEvent->condvar; 和 $cv->recv這二個,condvar 是 condition variable 的簡寫.是指當什么樣的條件成立時的變量

其實就是條件,當達到什么條件時退出事件循環.所以 AnyEvent 中沒有傳統事件中的 loop 函數.所以使用條件變量就相當于讓事件這個轉起來.

基本的 $cv->recv 是和 $cv->send 成對出現的,當事件調用 send 時,就一定要有 recv 收到這個調用,才會退出事件.

下面的 $cv->begin 和 $cv->end 也基本是這個意思.send 是單個條件.begin 和 end 是多個條件成立時退出,換個語來講,就是這些事件都成對的完成后,才退出事件.

代碼如下:

#!/usr/bin/perl

use strict;

use AnyEvent;

my $cv = AnyEvent->condvar( cb => sub {

warn "調用結束";

});

for my $i (1..10) {

$cv->begin;

my $w; $w = AnyEvent->timer(after => $i, cb => sub {

warn "finished timer $i";

undef $w;

$cv->end;

});

}

$cv->recv;

默認的 condvar 會對事件建一個條件為假的變量,所以直接有 send 和 begin send 之類才會變成真,然后退出事件循環.可以給這個地方看成一個信號量來理解就好了.y

如果條件不成立,在 AnyEvent 中事件會一直 loop .所以上面的例子中沒有 send .

有關 AnyEvent 其它,大家入門后可以玩玩象 AnyEvent::HTTP,twiggy 之類.看看這些應用和項目.

另外,在 AnyEvent 中我們常常使用 EV .他是一個 C 的 libev 的 Perl 接口,有非常高的性能.看完上面,在看看下面 EV 的使用,非常容易吧,基本不變.只是沒出現條件變量,

使用的傳統的 EV::loop; 來使這個運行起來.

代碼如下:

use EV;

# TIMERS

my $w = EV::timer 2, 0, sub {

warn "is called after 2s";

};

my $w = EV::timer 2, 2, sub {

warn "is called roughly every 2s (repeat = 2)";

};

undef $w; # destroy event watcher again

my $w = EV::periodic 0, 60, 0, sub {

warn "is called every minute, on the minute, exactly";

};

# IO

my $w = EV::io *STDIN, EV::READ, sub {

my ($w, $revents) = @_; # all callbacks receive the watcher and event mask

warn "stdin is readable, you entered: ", <STDIN>;

};

# SIGNALS

my $w = EV::signal 'QUIT', sub {

warn "sigquit received\n";

};

# CHILD/PID STATUS CHANGES

my $w = EV::child 666, 0, sub {

my ($w, $revents) = @_;

my $status = $w->rstatus;

};

# STAT CHANGES

my $w = EV::stat "/etc/passwd", 10, sub {

my ($w, $revents) = @_;

warn $w->path, " has changed somehow.\n";

};

# MAINLOOP

EV::loop; # loop until EV::unloop is called or all watchers stop

EV::loop EV::LOOP_ONESHOT; # block until at least one event could be handled

EV::loop EV::LOOP_NONBLOCK; # try to handle same events, but do not block

注:本文中大部分內容來自日本的@lestrrat

更多信息請查看IT技術專欄

更多信息請查看腳本欄目
易賢網手機網站地址:perl AnyEvent簡單介紹和入門知識
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點

版權所有:易賢網

中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
1000部国产精品成人观看| 色婷婷综合久久久中文一区二区| 久久先锋资源网| 91天堂素人约啪| 另类欧美日韩国产在线| 亚洲九九爱视频| 欧美一区二区免费视频| 97se亚洲国产综合在线| 久久成人18免费观看| 五月激情综合网| 亚洲人成精品久久久久| 久久久另类综合| 欧美精选午夜久久久乱码6080| 国产精品一区二区黑丝| 日本午夜精品一区二区三区电影 | 欧美四级电影在线观看| 国产成人精品亚洲日本在线桃色| 日韩精品一二三| 樱花草国产18久久久久| 亚洲一区二区美女| 亚洲欧洲精品天堂一级 | 国产成人精品三级麻豆| 国产成人免费高清| 成人aa视频在线观看| 国模大尺度一区二区三区| 91美女蜜桃在线| 99精品视频中文字幕| 中文字幕高清不卡| 911精品产国品一二三产区| 91蝌蚪porny成人天涯| 日本韩国欧美一区二区三区| 成人黄色在线视频| 日本高清不卡视频| 欧美一区二区视频网站| 久久久五月婷婷| 亚洲精品国产高清久久伦理二区| 亚洲国产中文字幕| 亚洲午夜私人影院| 久久精品国产色蜜蜜麻豆| 成人黄页在线观看| 欧美色网一区二区| 精品国产伦一区二区三区免费| 91精品国产综合久久国产大片| 精品国产免费人成电影在线观看四季| 中文字幕国产精品一区二区| 亚洲成人一区二区在线观看| 亚洲在线视频网站| 国内精品伊人久久久久影院对白| 一本大道久久精品懂色aⅴ| 69堂精品视频| 国产精品久久久久久久久免费桃花| 国产精品久久久久影院色老大| 亚洲一本大道在线| 丁香婷婷综合激情五月色| 9l国产精品久久久久麻豆| zzijzzij亚洲日本少妇熟睡| 精品视频在线看| 欧美综合亚洲图片综合区| 在线观看免费成人| 久久久九九九九| 天天综合日日夜夜精品| 波多野结衣亚洲一区| 欧美成人一区二区三区在线观看| 欧美精品一区二区三区久久久| 国产精品国产三级国产aⅴ无密码| 亚洲午夜免费福利视频| 国产电影一区在线| 日韩一级二级三级| 国产亚洲精品福利| 夜夜操天天操亚洲| 欧美日韩另类国产亚洲欧美一级| 91成人在线观看喷潮| 久久久青草青青国产亚洲免观| 日本一区二区三区高清不卡| 国产精品欧美一区二区三区| 亚洲欧美日韩国产手机在线| 美女视频免费一区| 国产成人小视频| 91精品国产入口| 一区二区三区色| 成人免费毛片app| 欧美日韩一区二区在线观看| 国产精品久久免费看| 国产美女久久久久| 在线观看成人小视频| 中文字幕在线一区| 国产一区二区不卡在线| 日韩视频免费观看高清在线视频| 亚洲国产精品天堂| 色婷婷久久99综合精品jk白丝| 日本一区二区三区国色天香| 韩国欧美一区二区| 欧美成人激情免费网| 日本欧美韩国一区三区| 欧美日韩激情在线| 亚洲成人av免费| 欧美在线三级电影| 一区二区在线电影| 在线一区二区视频| 亚洲午夜激情网页| 欧美午夜精品一区| 午夜亚洲国产au精品一区二区| 91天堂素人约啪| 亚洲人午夜精品天堂一二香蕉| 99国产欧美久久久精品| 国产精品电影院| 91网站最新网址| 樱桃视频在线观看一区| 欧美性色aⅴ视频一区日韩精品| 亚洲精品亚洲人成人网在线播放| 一本到三区不卡视频| 亚洲乱码日产精品bd| 99精品视频在线播放观看| 亚洲免费观看在线视频| 色哟哟国产精品| 亚洲高清在线精品| 91麻豆精品国产自产在线 | 国产精品美女一区二区三区| 久久99精品久久久| 色狠狠av一区二区三区| 亚洲国产成人av| 日韩视频在线一区二区| 国产在线一区二区| 欧美国产日本韩| 一本高清dvd不卡在线观看| 亚洲一区二区成人在线观看| 欧美精品vⅰdeose4hd| 久久99日本精品| 国产精品卡一卡二卡三| 国产精品久久久爽爽爽麻豆色哟哟| 99久免费精品视频在线观看 | 黄页视频在线91| 国产欧美精品一区aⅴ影院| 99精品视频一区二区三区| 亚洲午夜久久久久久久久电影院| 欧美一区二区三区四区久久| 精品亚洲国产成人av制服丝袜 | 国产网站一区二区| 99热在这里有精品免费| 亚洲va在线va天堂| 精品国内片67194| 成人av网站在线观看| 亚洲永久精品大片| 欧美大尺度电影在线| 尤物在线观看一区| 欧美成人vps| 91香蕉国产在线观看软件| 日韩1区2区日韩1区2区| 国产精品色哟哟网站| 欧美色倩网站大全免费| 九九国产精品视频| 亚洲男人天堂一区| 日韩欧美国产1| 91在线码无精品| 免费成人性网站| 欧美巨大另类极品videosbest | 欧美日韩美少妇| 国产激情精品久久久第一区二区| 亚洲丝袜另类动漫二区| 国产成人精品亚洲日本在线桃色| 亚洲综合色婷婷| 国产校园另类小说区| 在线免费观看成人短视频| 日韩成人一区二区三区在线观看| 精品国产乱码久久久久久夜甘婷婷 | 不卡视频一二三| 日韩成人精品在线观看| 最新日韩在线视频| 精品动漫一区二区三区在线观看| 91丝袜高跟美女视频| 狠狠色综合日日| 婷婷综合另类小说色区| 综合色天天鬼久久鬼色| 久久青草国产手机看片福利盒子| 欧美日韩一本到| 99精品视频中文字幕| 国产乱人伦偷精品视频不卡| 日韩成人精品在线| 亚洲一区在线观看免费观看电影高清| 国产日韩欧美综合在线| 日韩欧美不卡在线观看视频| 亚洲欧美怡红院| 国产欧美日韩三区| 精品国产凹凸成av人导航| 欧美喷水一区二区| 91福利社在线观看| 99久久久无码国产精品| 国产99久久久国产精品免费看| 久久福利资源站| 男女性色大片免费观看一区二区| 一区二区三区毛片| 成人免费在线播放视频| 国产欧美一二三区| 久久久久国产精品免费免费搜索| 欧美一区二区日韩| 884aa四虎影成人精品一区| 欧美日韩一区二区三区高清| 91蜜桃在线免费视频| 成人aaaa免费全部观看| 成人动漫av在线|