精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-07-13
int08h 写道 既然是按顺序调用,就必须是按顺序结束的,AS是单线程执行的,你让他怎么才能做到“后开始的先完成”
AS是单线程没有错,按顺序调用没错,但并不能保证按顺序结束。 方法A先调用,发送请求到服务器,然后等待服务器返回,此时方法B启动,发送请求到服务器,然后也等待服务器返回。 没有任何机制保证方法A一定先于方法B返回到客户端。 |
|
返回顶楼 | |
发表时间:2011-07-13
glovebx 写道 int08h 写道 既然是按顺序调用,就必须是按顺序结束的,AS是单线程执行的,你让他怎么才能做到“后开始的先完成”
AS是单线程没有错,按顺序调用没错,但并不能保证按顺序结束。 方法A先调用,发送请求到服务器,然后等待服务器返回,此时方法B启动,发送请求到服务器,然后也等待服务器返回。 没有任何机制保证方法A一定先于方法B返回到客户端。 你说的方式,一般我们是这么写的(我不会AS,大致写个样子) function A() { // 做点事 sendRequestA(url, data, callback); // 注意,这里A已经结束了 } function B() { // 做另一点事 sendRequestA(url, data, callback); // 注意,这里B已经结束了 } 因为A和B分别使用sendRequestA和sendRequestB和服务器通信,网络的操作是异步的,这导致sendRequestA的callback和sendRequestB的callback谁先执行是没有依据可寻的 但是,这2个callback的执行完全不影响函数A和函数B的结束,看上面的2行注释,函数的结束的概念我想大家还是一致的,函数执行完最后一条语句,自然就认为是结束了,从这一点上看,A和B的结束依旧是有顺序的 |
|
返回顶楼 | |
发表时间:2011-07-13
glovebx 写道 int08h 写道 既然是按顺序调用,就必须是按顺序结束的,AS是单线程执行的,你让他怎么才能做到“后开始的先完成”
AS是单线程没有错,按顺序调用没错,但并不能保证按顺序结束。 方法A先调用,发送请求到服务器,然后等待服务器返回,此时方法B启动,发送请求到服务器,然后也等待服务器返回。 没有任何机制保证方法A一定先于方法B返回到客户端。 我的主帖已经提到不涉及网络通讯和资源加载了。。。这个当然是异步的 |
|
返回顶楼 | |
发表时间:2011-07-13
int08h 写道 glovebx 写道 int08h 写道 既然是按顺序调用,就必须是按顺序结束的,AS是单线程执行的,你让他怎么才能做到“后开始的先完成”
AS是单线程没有错,按顺序调用没错,但并不能保证按顺序结束。 方法A先调用,发送请求到服务器,然后等待服务器返回,此时方法B启动,发送请求到服务器,然后也等待服务器返回。 没有任何机制保证方法A一定先于方法B返回到客户端。 你说的方式,一般我们是这么写的(我不会AS,大致写个样子) function A() { // 做点事 sendRequestA(url, data, callback); // 注意,这里A已经结束了 } function B() { // 做另一点事 sendRequestA(url, data, callback); // 注意,这里B已经结束了 } 因为A和B分别使用sendRequestA和sendRequestB和服务器通信,网络的操作是异步的,这导致sendRequestA的callback和sendRequestB的callback谁先执行是没有依据可寻的 但是,这2个callback的执行完全不影响函数A和函数B的结束,看上面的2行注释,函数的结束的概念我想大家还是一致的,函数执行完最后一条语句,自然就认为是结束了,从这一点上看,A和B的结束依旧是有顺序的 汗,原来异步操作中callback还未返回说是函数结束,我承认我败了。 手贱进来回这个帖子,太后悔了。 |
|
返回顶楼 | |
发表时间:2011-07-14
"原来异步操作中callback还未返回说是函数结束"
--恩, 我也承认 我理解错了, 大侠门!! |
|
返回顶楼 | |
发表时间:2011-07-14
glovebx 写道 int08h 写道 glovebx 写道 int08h 写道 既然是按顺序调用,就必须是按顺序结束的,AS是单线程执行的,你让他怎么才能做到“后开始的先完成”
AS是单线程没有错,按顺序调用没错,但并不能保证按顺序结束。 方法A先调用,发送请求到服务器,然后等待服务器返回,此时方法B启动,发送请求到服务器,然后也等待服务器返回。 没有任何机制保证方法A一定先于方法B返回到客户端。 你说的方式,一般我们是这么写的(我不会AS,大致写个样子) function A() { // 做点事 sendRequestA(url, data, callback); // 注意,这里A已经结束了 } function B() { // 做另一点事 sendRequestA(url, data, callback); // 注意,这里B已经结束了 } 因为A和B分别使用sendRequestA和sendRequestB和服务器通信,网络的操作是异步的,这导致sendRequestA的callback和sendRequestB的callback谁先执行是没有依据可寻的 但是,这2个callback的执行完全不影响函数A和函数B的结束,看上面的2行注释,函数的结束的概念我想大家还是一致的,函数执行完最后一条语句,自然就认为是结束了,从这一点上看,A和B的结束依旧是有顺序的 汗,原来异步操作中callback还未返回说是函数结束,我承认我败了。 手贱进来回这个帖子,太后悔了。 class MyCallback extends Runnable { public void run() { // 睡上一天 Thread.sleep(1000 * 60 * 60 * 24); System.out.println("callback"); } } void A() { int[] bigArray = new int[1000000]; for (int i = 0; i < bigArray.length; i++) { bigArray[i] = i; } Runnable callback = new MyCallback(); // 异步带回调 Thread thread = new Thread(callback); thread.start(); System.out.println("end of A"); } 那么这样,在输出end of A之后,A有没有结束?bigArray这个对象能不能被GC回收?如果一个函数没有结束,那么其所持有的变量必定不能释放,请问是不是整整一天这个bigArray都要占用着至少38MB的内存? |
|
返回顶楼 | |
发表时间:2011-07-14
最后修改:2011-07-14
glovebx 写道 int08h 写道 glovebx 写道 int08h 写道 既然是按顺序调用,就必须是按顺序结束的,AS是单线程执行的,你让他怎么才能做到“后开始的先完成”
AS是单线程没有错,按顺序调用没错,但并不能保证按顺序结束。 方法A先调用,发送请求到服务器,然后等待服务器返回,此时方法B启动,发送请求到服务器,然后也等待服务器返回。 没有任何机制保证方法A一定先于方法B返回到客户端。 你说的方式,一般我们是这么写的(我不会AS,大致写个样子) function A() { // 做点事 sendRequestA(url, data, callback); // 注意,这里A已经结束了 } function B() { // 做另一点事 sendRequestA(url, data, callback); // 注意,这里B已经结束了 } 因为A和B分别使用sendRequestA和sendRequestB和服务器通信,网络的操作是异步的,这导致sendRequestA的callback和sendRequestB的callback谁先执行是没有依据可寻的 但是,这2个callback的执行完全不影响函数A和函数B的结束,看上面的2行注释,函数的结束的概念我想大家还是一致的,函数执行完最后一条语句,自然就认为是结束了,从这一点上看,A和B的结束依旧是有顺序的 汗,原来异步操作中callback还未返回说是函数结束,我承认我败了。 手贱进来回这个帖子,太后悔了。 再者,函数的调用有一个“调用栈”的概念,如果一个函数没结束,那么这个函数肯定会在调用栈中出现。 那么再看看上面的代码 function callback() { var fn = arguments.caller; while (fn) { print(fn); fn = fn.caller; } } function A() { sendRequestA(url, data, callback); } 按照你说的,当callback没结束之前,A函数并没有结束,那么我可以推断,在callback中打印调用栈,其栈上一定会有A这个函数 结果如何,是不是要实践一下呢? |
|
返回顶楼 | |
发表时间:2011-07-16
有所收获!
|
|
返回顶楼 | |
发表时间:2011-11-08
我汗 把我弄晕了
|
|
返回顶楼 | |
发表时间:2011-11-08
glovebx 写道 int08h 写道 既然是按顺序调用,就必须是按顺序结束的,AS是单线程执行的,你让他怎么才能做到“后开始的先完成”
AS是单线程没有错,按顺序调用没错,但并不能保证按顺序结束。 方法A先调用,发送请求到服务器,然后等待服务器返回,此时方法B启动,发送请求到服务器,然后也等待服务器返回。 没有任何机制保证方法A一定先于方法B返回到客户端。 支持这个说法 实际也是这样的 as3的事件机制就是异步的 |
|
返回顶楼 | |