我们称之为JS异步"执行的线索"?

时间:2017-08-03 13:26:17

标签: javascript multithreading asynchronous

在Java中我们有#34;线程",在CPython中我们有线程(非并发)和"进程"。

在JS中,当我启动async函数或方法时,我如何正式引用这些"执行代码的链?"?

我听说每个这样的代码块从头到尾执行*,这意味着JS中从不存在任何并发**处理。我不太确定这是否与CPython线程相同。我个人不愿意使用" thread"因为我们在JS中拥有这些" strands"与Java并发线程有很大不同。

*只是为了澄清Stephen Cleary的有用回复:我的意思是"每个 同步 代码块"。显然,如果遇到await,则控制权被释放......

**显然从来没有任何"真正的并行"处理。我遵循广泛接受的"并发"之间的区别。 (任何时候只有一个线程,但是一个"执行链"可能让位给另一个)和" parallel" (多个进程,实现真正的并行处理,通常使用多个CPU或核心或进程)。我的理解是这些" strands"在JS中甚至不是并发的:一旦一个AJAX方法或Promiseasync方法/函数开始执行,就不会发生任何事情,直到它完成(或await发生)...

1 个答案:

答案 0 :(得分:0)

到目前为止,已经有24个人选择了这一点。

FWIW,如果有人古怪有一天对这个问题感兴趣,我建议“囤积股”或只是“股”......他们 hog 浏览器的JS引擎,它会出现,除非遇到await,否则不要放手。

我一直在开发这个应用程序,其中3个“strands”或多或少同时运行,所有这些都涉及AJAX调用和数据库查询...但事实上,如果3个中的第2个执行并返回之前是非常可取的第三

但是因为对于MySQL而言,第三个查询比第二个查询简单得多,如果允许所有内容以不受约束的异步性运行,前者往往会更早地从其AJAX“偏移”返回。然后,在允许第二条链进行其操作之前,这会导致很大的延迟。因此,强制代码执行并完成第二个“链”需要使用asyncawait进行相当多的强制。

我读过一篇关于JS asynchronicity的评论,其中有人认为JS中的操作方式意味着你“永远不必担心并发问题等”。我不同意:如果你实际上不知道await何时解锁,这必然意味着涉及并发。也许“囤积股”比真正的“并发”更容易处理,更不用说真正的“并行”了,不过......?