婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > perl AnyEvent簡單介紹和入門知識

perl AnyEvent簡單介紹和入門知識

熱門標簽:上海企業外呼系統 萬利達百貨商場地圖標注 外呼電信系統 智能機器人電銷神器 熱門電銷機器人 河南虛擬外呼系統公司 okcc外呼系統怎么調速度 惠州龍門400電話要怎么申請 電話機器人哪里有賣

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

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

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

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

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

標簽:周口 百色 淮安 合肥 秦皇島 綿陽 綏化 周口

巨人網絡通訊聲明:本文標題《perl AnyEvent簡單介紹和入門知識》,本文關鍵詞  perl,AnyEvent,簡單,介紹,和,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《perl AnyEvent簡單介紹和入門知識》相關的同類信息!
  • 本頁收集關于perl AnyEvent簡單介紹和入門知識的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    91.成人天堂一区| 在线免费观看日本一区| 天使萌一区二区三区免费观看| 国产福利一区在线观看| 日韩天堂在线观看| 国产精品一二三四| 色综合久久中文字幕| 欧美日产在线观看| 热久久免费视频| 精品播放一区二区| 福利一区二区在线| 亚洲欧美区自拍先锋| 91啦中文在线观看| 一区二区三区中文字幕电影| 欧美人与性动xxxx| 狂野欧美性猛交blacked| 国产一区二区三区在线观看免费 | 国产成人精品三级麻豆| 毛片av一区二区| 精品一区二区在线视频| 狠狠色丁香婷综合久久| 国产精品美女久久久久久久久久久 | 国产酒店精品激情| 综合久久国产九一剧情麻豆| 日韩av不卡在线观看| 久久久精品免费观看| 久久久久久麻豆| 美女免费视频一区| 在线不卡一区二区| 懂色av中文字幕一区二区三区| 日韩美女视频一区二区 | 国产精品青草久久| 欧美三区在线视频| 丁香婷婷综合激情五月色| 同产精品九九九| 亚洲丝袜自拍清纯另类| 欧美一级国产精品| 色菇凉天天综合网| 国产成人在线电影| 日韩精品欧美精品| 亚洲欧美韩国综合色| 国产人妖乱国产精品人妖| 91麻豆精品国产91久久久| 91小视频免费观看| 成人午夜视频在线| 337p粉嫩大胆噜噜噜噜噜91av | 欧美xingq一区二区| 99re热视频这里只精品| 国产在线播放一区三区四| 亚洲国产美女搞黄色| 亚洲欧洲另类国产综合| 欧美韩国日本综合| 久久影音资源网| 欧美精品一区二区久久久| 日韩欧美中文字幕精品| 欧美日高清视频| 欧美精品一级二级| 91精品国产综合久久婷婷香蕉| 欧美在线免费播放| 91污片在线观看| 91麻豆6部合集magnet| 91视频com| 日本韩国欧美一区| 欧美怡红院视频| 欧美羞羞免费网站| 7777女厕盗摄久久久| 欧美日韩国产乱码电影| 欧美性大战久久久久久久蜜臀| 色美美综合视频| 欧美丝袜丝交足nylons图片| 欧美日韩视频在线一区二区| 欧美在线制服丝袜| 制服.丝袜.亚洲.中文.综合| 日韩一区二区电影在线| 欧美一级在线观看| 国产亚洲精品bt天堂精选| 久久久www免费人成精品| 欧美激情中文字幕| 18成人在线视频| 亚洲一区二区三区四区在线观看| 一级精品视频在线观看宜春院| 亚洲成av人片www| 精品一区二区在线看| 亚洲午夜一区二区| 久久99精品一区二区三区| 91精品国产综合久久香蕉的特点 | 欧美精品亚洲二区| 日韩精品中文字幕在线不卡尤物| 精品成人在线观看| 色就色 综合激情| 亚洲欧洲日韩在线| 成人激情免费电影网址| 国产日韩欧美精品综合| 亚洲国产精品自拍| 亚洲精品视频在线观看网站| 亚洲一区二区在线观看视频| 欧美一区二区成人| 国产精品久久久久久久久快鸭| 亚洲自拍与偷拍| 久久99久国产精品黄毛片色诱| 91在线观看成人| 欧美电影免费观看高清完整版在| 国产精品乱人伦中文| 亚洲高清免费一级二级三级| 国产精品美女一区二区三区| 91在线小视频| 一二三四社区欧美黄| 91精品欧美综合在线观看最新 | 国产乱子伦一区二区三区国色天香| 精品国产精品网麻豆系列| 国产激情偷乱视频一区二区三区 | 日韩成人一级大片| 精品日韩一区二区| 国产成都精品91一区二区三| 最新久久zyz资源站| 欧美日韩免费一区二区三区视频| 图片区小说区国产精品视频| 日韩一区二区在线免费观看| 国产精品一区二区在线播放 | 国产制服丝袜一区| 中文字幕va一区二区三区| 91免费看`日韩一区二区| 亚洲成人自拍网| 久久亚区不卡日本| 91美女精品福利| 老司机精品视频导航| 国产精品入口麻豆九色| 欧美精品自拍偷拍| 国产99久久久国产精品潘金网站| 亚洲男人的天堂av| 久久网站最新地址| 欧美日韩一级片网站| 丰满白嫩尤物一区二区| 日日夜夜免费精品| 日韩码欧中文字| 欧美va在线播放| 色诱亚洲精品久久久久久| 久久精品国产亚洲aⅴ| 亚洲综合在线免费观看| 国产亚洲欧美日韩日本| 欧美精品在欧美一区二区少妇| av在线不卡网| 国产在线不卡一卡二卡三卡四卡| 亚洲成人综合视频| 亚洲精选免费视频| 国产区在线观看成人精品| 欧美色综合网站| www.欧美精品一二区| 国内精品伊人久久久久av影院| 亚洲国产一二三| 国产精品不卡视频| 国产精品嫩草影院com| 亚洲啪啪综合av一区二区三区| 884aa四虎影成人精品一区| 成人av资源在线观看| 蜜臀久久99精品久久久画质超高清 | 91精品中文字幕一区二区三区| 9i在线看片成人免费| 激情另类小说区图片区视频区| 亚洲资源中文字幕| 国产欧美一区二区三区在线看蜜臀 | 美女免费视频一区二区| 亚洲大型综合色站| 亚洲一区二区精品视频| 久久久久国产免费免费| 91丝袜美腿高跟国产极品老师| 国产一区二区三区视频在线播放| 亚洲综合色噜噜狠狠| 亚洲人成网站色在线观看| 国产目拍亚洲精品99久久精品| 欧美岛国在线观看| 日韩小视频在线观看专区| 欧美色欧美亚洲另类二区| 日本高清不卡视频| 在线一区二区三区| 欧美精品aⅴ在线视频| 91麻豆精品国产| 国模一区二区三区白浆| 欧美日韩一区高清| 国产69精品久久久久777| 视频一区中文字幕国产| 国产精品久久久久aaaa| 欧美成人女星排行榜| 欧美亚洲国产一区二区三区| 国产精品综合一区二区| 水野朝阳av一区二区三区| 中文字幕日韩精品一区| 欧美一区二区啪啪| 91蜜桃传媒精品久久久一区二区| 麻豆国产精品视频| 天堂一区二区在线免费观看| 中文字幕日本不卡| 中文在线一区二区 | 欧美日韩精品欧美日韩精品一| 国内成人自拍视频| 日本不卡一区二区三区 | 亚洲女同女同女同女同女同69| 久久久久久99精品| 91精品国产欧美一区二区18| 色婷婷一区二区|