【发布时间】:2016-03-11 17:40:18
【问题描述】:
我不是 javascript 程序员,但我试图了解异步编程背后的原因,而带有回调的 javascript 实现似乎很简单。 我知道 Javascript 有一个主循环,它执行类似的操作
while(1){
event = EventStack.pop()
RunCallBacks(event)
}
但是让我们假设我正在进行一些 I/O 调用。在 I/O 成功后,谁将该事件放入堆栈?是否有一些后台线程始终在监听操作系统并提供事件堆栈?
编辑:
感谢 elclanrs 会议链接,我更了解正在发生的事情。 但是仍然缺少一些东西。例如,如果我要开发 xmlhttprequest javascript api,这是正确的方法吗? (这是非常简化的伪代码,我只是想了解一下大局)
Global UrlStack # a global url stack shared by all threads
Sockets = [] # list of sockets to read from
while(1){
url = UrlStack.pop() # pop the first url in the stack
socket = CreateSocket() # create socket and send request
socket.connect(url, someport)
socket.send(request)
Sockets.append(socket)
s = select(Sockets, timeout = 0) # use the select function provided by the OS to wait for the first readable socket
if (s is not empty){
addCorrespondingCallbacksToTheCallBackQueue()
}
}
然后,当一些 javascript 代码想要发出异步 http 请求时,我只需将 url 添加到 UrlStack。这是正确的做法吗?
【问题讨论】:
标签: javascript asynchronous io