【发布时间】:2020-11-02 23:44:25
【问题描述】:
据我所知,多线程是我们可以提供给单个程序以并行运行多个任务或代码块的能力。例如,当我们输入 word doc 时,拼写检查器在单独的线程上运行。它类似于在单个程序级别上完成的多任务。
异步编程帮助我们实现的是提供编写代码的能力,它不会阻塞当前正在运行进程的线程并以顺序方式执行其余代码。例如,如果我们调用 db 来获取一些数据,然后对接收到的数据执行一些操作。之后,其他一些独立的东西正在执行。因此,为了不阻塞代码流,我们可以使用对数据执行逻辑操作的回调对 db 进行异步调用。其余的代码都是按顺序执行的。
我的问题是,如果我们知道程序中的依赖和独立任务是什么,我们不能简单地使用多线程的概念吗?为什么要引入这个异步编程的新概念?像 promises 一样,在 JavaScript 中回调或在 java 中完成未来。 Java 8 中还引入了可完成的未来。那么在 Java 8 之前存在什么?
如果我的陈述有任何错误,请纠正我。
【问题讨论】:
-
这不是一个新概念
-
异步仍然会阻塞,它使用一种叫做协作多任务的东西,所以如果在回调中你创建了一个无限循环,一切都会挂起。对于在 CPU/OS 级别工作的线程,一个线程不会阻塞另一个线程,除非使用关键部分/锁。线程也有更多的复杂性,即使增加一个数字也不是微不足道的。
标签: javascript java multithreading asynchronous