- 论坛徽章:
- 1
|
本帖最后由 seufy88 于 2014-03-25 20:02 编辑
py 发表于 2014-02-21 11:16 ![]()
回复 15# seufy88
异步和非阻塞这两个词很多时候就混用了。
请允许我再追问一下.
这里所谓的异步,或是mojo里的异步
请问下面的mojo中的异步,是指如果下面两个web 请求都有数据到达了, sub A和 sub B是会"同时"处理 这个意思吗?
$ua ->get('http://abc.com" => sub { A});
$ua ->get('http://def.com" => sub { B});
sub A, sub B可以同时运行,互不影响?
补充:
就是 mojo 中
$ua ->get("web 1" => sub {A});
$ua ->get("web 2" => sub {B});
....
do something else
两次get是非阻塞的,process不会阻塞在这里,
但是如果两个get之后有数据到达了,是先执行 sub A,还是执行sub B?
又或者,如果process正在处理 do sometheing else部分,这时候A的数据可读了,是马上类似中断一样的去处理sub A吗?
如果处理A的过程中,正好B的数据也变为可读了,那么又中断去处理B吗?
还是说,A和B都不会相互影响,也不会影响process处理do something else(如果正在处理的话)
从使用UA模块的来看,好像是A,B互不影响,像是注册了A,B两个事件,事件发生了就各自执行callback,也不会影响到当前process
之所以有这个疑问,是根据LINUX网络编程是:- while(1) {
- 非阻塞read(设备1);
- if(设备1有数据到达)
- 处理数据;
- 非阻塞read(设备2);
- if(设备2有数据到达)
- 处理数据;
- ...
- sleep(n);
- }
复制代码 这上面提到的"非阻塞"来看(不清楚这里的非阻塞和mojo里的是不是一个概念)
在这个例子中,总是在一个process中,我无法理解异步的实现
或是之前你提到的:
"我先说完美的异步数据库操作的应该是什么样的。假设有一个web页面涉及5个sql查询操作,每个操作耗时1秒,在只有一个worker的情况下(单进程),如果有一个人访问这个页面,读取时间应该是1秒。如果有10个人同时访问这个页面,10个人都应该在1秒钟之内看到页面(理想状况下)"
|
|