Javascript 混淆了多线程和异步编程

Javascript 混淆了多线程和异步编程,javascript,java,multithreading,asynchronous,Javascript,Java,Multithreading,Asynchronous,据我所知,多线程是一种我们可以为单个程序提供的并行运行多个任务或代码块的能力。例如,当我们输入word文档时,拼写检查器在单独的线程上运行。它类似于在单个程序级别执行多任务 异步编程帮助我们实现的是提供这样一种能力:以这样一种方式编写代码,即它不会阻塞当前正在运行进程的线程,并以顺序方式执行其余代码。例如,如果我们进行db调用以获取一些数据,然后对接收到的数据执行一些操作。之后,其他一些独立的东西正在执行。因此,为了不阻塞代码流,我们可以使用对数据执行逻辑操作的回调对db进行异步调用。代码的其余

据我所知,多线程是一种我们可以为单个程序提供的并行运行多个任务或代码块的能力。例如,当我们输入word文档时,拼写检查器在单独的线程上运行。它类似于在单个程序级别执行多任务

异步编程帮助我们实现的是提供这样一种能力:以这样一种方式编写代码,即它不会阻塞当前正在运行进程的线程,并以顺序方式执行其余代码。例如,如果我们进行db调用以获取一些数据,然后对接收到的数据执行一些操作。之后,其他一些独立的东西正在执行。因此,为了不阻塞代码流,我们可以使用对数据执行逻辑操作的回调对db进行异步调用。代码的其余部分按顺序执行

我的问题是,如果我们知道程序中的依赖和独立任务是什么,我们就不能只使用多线程的概念吗?为什么引入异步编程的这个新概念?就像承诺一样,在JavaScript中调用,或者在java中调用completable future。Java8中还引入了完全未来。在Java8之前有什么


如果我在陈述中的任何地方出错,请纠正我。

好吧,据我所知,理论上你可以限制自己只使用异步函数和线程

你的问题实际上是关于整个编程语言的范例。我的答案是,即使现代应用程序频繁使用多线程,大多数代码仍然是按顺序执行的。输入->计算->输出。这一点多年来没有改变

现在,从更实际的角度来看。在Javascript中,如果只使用异步函数,很快就会发现自己陷入回调地狱:)如果在Java中同时执行所有操作,结果几乎相同

我这边的最后一个问题是:你的底线在哪里?您希望异步执行所有内容,但请记住,这些异步代码块本身仍然是同步的。那么,你是在问并行执行每一行代码吗?如果是这样的话,我认为这不是一个Java/JS问题,而是招募一批新的编程语言开发人员的未解之谜:)


这是一个来自java/js开发人员的答案,也许有一些语言可以满足您的问题,但我不知道它们。

答案是java 1.0具有与java 1.8相同的功能(除非在java 1.0发布时不存在像INET6Address这样的技术更改)。两者都是图灵完备的


添加的是代码框架。添加异步只是省去了在您想要使用自定义框架时反复实现或添加自定义框架的麻烦。

这不是一个新概念Async仍然会阻塞,它使用了一种称为协作多任务的方法,因此如果在回调中创建了无限循环,所有内容都将挂起。对于在CPU/OS级别工作的线程,1个线程不会阻塞另一个线程,除非使用了关键部分/锁。线程也有更复杂的方式,即使增加一个数字也不是一件小事。以异步方式编写代码以不阻塞当前线程,即在移动到下一个线程之前不等待某些指令完成。让我们举一个例子,在这个例子中,我进行了一个DB查询来获取一些数据,并对这些数据执行一些操作。然后是计算数字阶乘的代码。假设我们的代码在单个线程上运行,那么它将等待db调用完成,以便计算阶乘。但在这里,我们可以使用多线程同时执行这两个任务,但执行db代码的线程本身是阻塞的。这两种方法都提供了编写非阻塞代码的相同优势,但这取决于开发人员如何使用,对吗?。谢谢您的回答是的,是否使用异步由开发人员决定。