相关疑难解决方法(0)

1126
推荐指数
17
解决办法
84万
查看次数

异步调用是否始终创建/调用新线程?

异步调用总是创建一个新线程吗?

例:

如果JavaScript是单线程的,那么它如何进行异步回发呢?它是否实际阻塞,直到它得到回调?如果是这样,这真的是异步电话吗?

multithreading asynchronous

31
推荐指数
3
解决办法
8934
查看次数

单线程异步处理

即使在阅读http://krondo.com/?p=1209异步调用是否总是创建/调用新线程之后?我仍然对如何在固有的单线程系统上提供异步调用感到困惑。我将解释我到目前为止的理解并指出我的疑问。

我读过的一个例子是描述一个提供异步请求处理的 TCP 服务器 - 用户会调用一个方法,例如 get(Callback c),稍后会调用回调。现在,我在这里的第一个问题 - 我们已经有两个系统,一个服务器和一个客户端。这不是我的意思,因为事实上我们至少有两个线程——一个在服务器端,一个在客户端。

我读过的另一个例子是 JavaScript,因为这是使用Node.js. 我无法理解,也许用 Java 术语思考的是:如果我执行下面的代码(为不正确的,可能是残暴的语法道歉):

function foo(){
    read_file(FIle location, Callback c) //asynchronous call, does not block
    //do many things more here, potentially for hours
}
Run Code Online (Sandbox Code Playgroud)

对读取文件的调用执行 (sth) 并返回,允许我的函数的其余部分执行。由于只有一个线程,即正在执行我的函数的线程,那么同一个线程(也是唯一一个正在执行我的东西的线程)究竟如何从磁盘读取字节?

基本上,在我看来,我缺少一些像某种循环调度程序一样的底层机制,它本质上是单线程的,可能会将任务拆分为较小的任务,或者调用会产生线程的多线程组件和读入文件。

预先感谢所有评论并指出我在途中的错误。

更新:感谢所有回复。帮助我解决这个问题的更多好资源在这里:

  1. http://www.html5rocks.com/en/tutorials/async/deferred/
  2. http://lostechies.com/johnteague/2012/11/30/node-js-must-know-concepts-asynchrounous/
  3. http://www.interact-sw.co.uk/iangblog/2004/09/23/threadless (.NET)
  4. http://ejohn.org/blog/how-javascript-timers-work/(计时器的内在函数)
  5. http://www.mobl-lang.org/283/reducing-the-pain-synchronous-asynchronous-programming/

javascript java multithreading asynchronous single-threaded

5
推荐指数
1
解决办法
3061
查看次数