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

perl anyevent簡單介紹和入門知識
來源:易賢網 閱讀:1441 次 日期:2016-06-29 09:21:34
溫馨提示:易賢網小編為您整理了“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

更多信息請查看腳本欄目
易賢網手機網站地址:perl anyevent簡單介紹和入門知識
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!

2026上岸·考公考編培訓報班

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
云南網警備案專用圖標
聯系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網
云南網警報警專用圖標
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
欧美日韩国内自拍| 久久成人18免费观看| 99pao成人国产永久免费视频| 久久精品官网| 有码中文亚洲精品| 久久一二三四| 最新日韩在线视频| 欧美伦理视频网站| 亚洲一区二区3| 国产视频亚洲| 久久深夜福利免费观看| 亚洲国产合集| 国产精品福利片| 欧美一区二区三区在线观看视频| 国产一区二区三区丝袜| 毛片基地黄久久久久久天堂| 日韩一本二本av| 国产精品综合| 女生裸体视频一区二区三区 | 欧美在线短视频| 在线观看不卡| 欧美日韩不卡| 久久久久久久久久久久久9999| 亚洲精品偷拍| 国产日韩欧美另类| 欧美噜噜久久久xxx| 欧美一区日韩一区| 日韩一级精品| 激情五月综合色婷婷一区二区| 欧美日韩另类国产亚洲欧美一级| 久久国产主播精品| 亚洲小说欧美另类婷婷| 亚洲高清不卡在线| 国产美女一区二区| 欧美午夜剧场| 欧美日韩国产首页| 欧美国产精品一区| 久久久在线视频| 新67194成人永久网站| 日韩亚洲综合在线| 亚洲精品一区二区三区在线观看| 国产一区在线播放| 国产精品视频观看| 欧美午夜大胆人体| 欧美日韩一视频区二区| 欧美精品 日韩| 欧美xart系列高清| 久久频这里精品99香蕉| 久久激情视频| 欧美一区2区三区4区公司二百| 一区二区电影免费观看| 亚洲精品乱码| 亚洲国产日韩一区二区| 国产综合精品| 欧美日韩精品欧美日韩精品 | 国产日韩在线视频| 欧美无乱码久久久免费午夜一区| 久久av一区二区三区漫画| 午夜在线观看免费一区| 中文欧美日韩| 日韩一二三在线视频播| 亚洲国产日韩在线一区模特| 国产亚洲aⅴaaaaaa毛片| 欧美色欧美亚洲另类七区| 久久久一本精品99久久精品66| 揄拍成人国产精品视频| 国产美女精品| 国产麻豆成人精品| 欧美视频官网| 欧美精品色网| 美女精品网站| 久久婷婷久久一区二区三区| 欧美一区二区视频观看视频| 亚洲欧美日韩综合一区| 亚洲性视频网站| 极品尤物av久久免费看| 亚洲国产精选| 狠狠色香婷婷久久亚洲精品| 国产真实乱子伦精品视频| 国产视频不卡| 国产欧美一区二区视频| 国产日韩视频| 狠狠色狠狠色综合日日五| 激情久久久久久久| 欧美揉bbbbb揉bbbbb| 国产精品jizz在线观看美国 | 亚洲人成久久| 欧美专区亚洲专区| 久久精品女人天堂| 国产精品视频一二三| 欧美四级剧情无删版影片| 欧美精品在线视频观看| 国产精品二区在线观看| 欧美激情自拍| 欧美日韩影院| 99国产精品久久久久久久成人热 | 午夜一区二区三区在线观看| 久久精品中文字幕一区| 影音先锋一区| 免费亚洲一区二区| 欧美亚洲视频一区二区| 国产女主播一区二区三区| 欧美极品在线播放| 亚洲六月丁香色婷婷综合久久| 国内外成人免费激情在线视频 | 亚洲欧美在线播放| 欧美成人精品一区二区| 国产一区二区三区久久悠悠色av| 国产精品久久久久7777婷婷| 欧美www视频| 亚洲欧美日韩国产另类专区| 国产九色精品成人porny| 欧美一区=区| 在线看欧美日韩| 欧美精品尤物在线| 亚洲一区二区黄| 国产亚洲激情视频在线| 老色鬼久久亚洲一区二区| 夜夜嗨av一区二区三区网站四季av| 欧美日韩国产高清视频| 亚洲欧美中文日韩在线| 亚洲电影在线播放| 国产精品国产自产拍高清av| 久久久99爱| 亚洲一区二区成人| 在线观看欧美日韩国产| 欧美三区在线视频| 久久爱91午夜羞羞| 日韩午夜在线视频| 国产欧美一区二区三区国产幕精品| 免费日本视频一区| 亚洲欧美日韩国产综合在线| 一区一区视频| 国产欧美一区二区三区沐欲| 国产亚洲免费的视频看| 亚洲激情中文1区| 一区二区三区三区在线| 欧美在线观看视频一区二区三区| 久久久久成人精品| 欧美日韩网站| 国产一区二区三区在线观看视频| 亚洲电影免费观看高清完整版在线| 国产精品免费看| 欧美日韩一卡二卡| 欧美激情视频在线播放| 久久久久中文| 欧美亚洲专区| 香蕉成人伊视频在线观看| 亚洲性色视频| 亚洲视屏在线播放| 亚洲毛片在线| 亚洲精品中文在线| 亚洲激情视频| 精品999在线播放| 一区二区在线观看视频在线观看| 亚洲婷婷综合久久一本伊一区| 日韩小视频在线观看专区| 亚洲国产高清一区二区三区| 激情综合五月天| 在线电影一区| 亚洲第一久久影院| 亚洲经典在线| 91久久精品久久国产性色也91| 在线观看不卡av| 亚洲国产小视频在线观看| 亚洲激情国产精品| 亚洲视频999| 亚洲欧美日韩国产一区二区三区| 亚洲香蕉在线观看| 中文亚洲字幕| 亚洲一区成人| 欧美在线视频导航| 欧美亚洲三区| 美日韩精品免费观看视频| 欧美激情成人在线| 久久久久久**毛片大全| 久久精品久久综合| 欧美激情女人20p| 国产精品国产三级国产普通话蜜臀 | 最新亚洲一区| 亚洲激情欧美| 一本久道久久综合婷婷鲸鱼| 国产精品免费一区二区三区观看| 欧美精品福利视频| 欧美日韩一区二区三区免费| 欧美精品久久久久久久久老牛影院| 久久久久久亚洲综合影院红桃| 模特精品在线| 国产精品久久久久久久第一福利| 激情另类综合| 日韩午夜电影| 性做久久久久久久久| 亚洲视频在线观看免费| 国产日韩欧美综合精品| 亚洲欧洲精品一区二区精品久久久| 99精品热视频| 久久久女女女女999久久| 欧美成人精品三级在线观看 | 激情综合网激情| 夜色激情一区二区|