【发布时间】:2014-04-10 14:33:05
【问题描述】:
我一直在研究很多多线程、回调、调度队列,以同步和异步的方式...... 我研究得越多,我就越困惑和沮丧,以至于我觉得我似乎永远无法理解它。请有人可以引导我找到正确的开始方向。大多数到目前为止,我发现的信息都是关于做什么和优势的东西。我真正想知道的是,当与回调异步并在一个线程上时,函数如何立即返回。 [这里]'s(http://nathansjslessons.appspot.com/lesson?id=1085) 我从哪里得到这些信息的
The function **returns immediately** before the file is read and schedules the read to happen
sometime in the future. Once the data is ready, the callback function is called on the
data.
这是一个如何使用常规阻塞读取函数来获取文件内容的示例 var readFile = function() {
var data;
data = read('file.txt');
dosomething('contect' + data);
}
这是使用异步 readAsync 函数的相同示例。
var readFileAsynch = function () {
var func = function (x) {
// i can do something with data
dosomthing('content'+data);
}
**readAsynch('file.txt',func);**
dosomemorestuff();
};
据我所知,如果您使用主线程以外的另一个线程而不是我认为的异步方式,那么如果您只有 一个线程(如 javascript),那么异步将如何真正起作用..?
而且,当谈到目标 c 中的调度队列时,是否认为队列只是指向块或函数的指针数组,并且线程负责在应用程序中管理此队列..?
我真的很抱歉我的问题很模糊,但我也是.. 希望任何人都可以提供一些我可以阅读的源代码或实现,以了解真正发生的事情。我厌倦了仅仅阅读诸如“使用线程非常昂贵”之类的东西……但是以什么方式……?或者,我不需要知道它..?
edit:那么 readAsynch('file.txt',func); 与其他函数的行为有何不同,因此它被称为 asynch..?以及为什么它可以立即执行 dosomemorestuff 而无需等待上面的 readAsynch 函数,除非(我认为)当您调用 readAsynch 时,它是由另一个线程完成的..?
【问题讨论】:
-
Javascript 是单线程的,但您的浏览器不是。您的浏览器使用另一个线程等待来自服务器的响应,然后在收到响应时中断您的 javascript 线程,以便处理任何回调。
-
@thefourtheye 我不太确定我是否使用了不恰当的词。我所说的实现的意思是,如果有一个函数充当异步函数,以便我可以调用它,那么无需等待它,执行下一条语句。那么这种函数如何实现异步行为..?
标签: javascript multithreading asynchronous operating-system objective-c-blocks