- 論壇徽章:
- 1
|
本帖最后由 seufy88 于 2014-03-25 20:02 編輯
py 發(fā)表于 2014-02-21 11:16 ![]()
回復(fù) 15# seufy88
異步和非阻塞這兩個(gè)詞很多時(shí)候就混用了。
請?jiān)试S我再追問一下.
這里所謂的異步,或是mojo里的異步
請問下面的mojo中的異步,是指如果下面兩個(gè)web 請求都有數(shù)據(jù)到達(dá)了, sub A和 sub B是會(huì)"同時(shí)"處理 這個(gè)意思嗎?
$ua ->get('http://abc.com" => sub { A});
$ua ->get('http://def.com" => sub { B});
sub A, sub B可以同時(shí)運(yùn)行,互不影響?
補(bǔ)充:
就是 mojo 中
$ua ->get("web 1" => sub {A});
$ua ->get("web 2" => sub {B});
....
do something else
兩次get是非阻塞的,process不會(huì)阻塞在這里,
但是如果兩個(gè)get之后有數(shù)據(jù)到達(dá)了,是先執(zhí)行 sub A,還是執(zhí)行sub B?
又或者,如果process正在處理 do sometheing else部分,這時(shí)候A的數(shù)據(jù)可讀了,是馬上類似中斷一樣的去處理sub A嗎?
如果處理A的過程中,正好B的數(shù)據(jù)也變?yōu)榭勺x了,那么又中斷去處理B嗎?
還是說,A和B都不會(huì)相互影響,也不會(huì)影響process處理do something else(如果正在處理的話)
從使用UA模塊的來看,好像是A,B互不影響,像是注冊了A,B兩個(gè)事件,事件發(fā)生了就各自執(zhí)行callback,也不會(huì)影響到當(dāng)前process
之所以有這個(gè)疑問,是根據(jù)LINUX網(wǎng)絡(luò)編程是:- while(1) {
- 非阻塞read(設(shè)備1);
- if(設(shè)備1有數(shù)據(jù)到達(dá))
- 處理數(shù)據(jù);
- 非阻塞read(設(shè)備2);
- if(設(shè)備2有數(shù)據(jù)到達(dá))
- 處理數(shù)據(jù);
- ...
- sleep(n);
- }
復(fù)制代碼 這上面提到的"非阻塞"來看(不清楚這里的非阻塞和mojo里的是不是一個(gè)概念)
在這個(gè)例子中,總是在一個(gè)process中,我無法理解異步的實(shí)現(xiàn)
或是之前你提到的:
"我先說完美的異步數(shù)據(jù)庫操作的應(yīng)該是什么樣的。假設(shè)有一個(gè)web頁面涉及5個(gè)sql查詢操作,每個(gè)操作耗時(shí)1秒,在只有一個(gè)worker的情況下(單進(jìn)程),如果有一個(gè)人訪問這個(gè)頁面,讀取時(shí)間應(yīng)該是1秒。如果有10個(gè)人同時(shí)訪問這個(gè)頁面,10個(gè)人都應(yīng)該在1秒鐘之內(nèi)看到頁面(理想狀況下)"
|
|