我读过不同的文章和类似的问题,我知道这两个概念是不同的,但我似乎不知道正确的答案。
据我所知,thread是按工人数量计算的,而sync/async是按任务顺序计算的。我想问一下我的理解是否正确,举下面的例子。
得做个三明治。
eggs.
一个线==一个煎锅。
上。
。
上。
煎鸡蛋。
我的理解正确吗?
+)如果是这样的话,像javascript这样的单线程/异步的情况下,事件循环中的任务只是在队列中等待,没有进展,对吗?
发布于 2022-05-06 16:18:08
这个例子很好,也很有趣。别忘了以后再拿另一个做“多线程和异步”,否则它会被烧掉;)。否则,在我看来,这似乎是正确的。
但是,这个示例对于“单线程&异步”的情况不是很好,它可能是混乱的根源。在实践中,异步不保证抢占(鸡蛋和面包之间的切换)。这通常是合作进行的。问题是,在你的例子中,面包是不能煮的,而鸡蛋是因为只有一个锅。实际上,像I/O操作这样的任务可以在不使用任何核心(即。(潘)
异步主要用于避免等待任务完成,而其他一些事情可以完成。它对于计算任务并没有真正的用处。例如,如果你为两个朋友做了两个三明治,而你不知道他们是否喜欢鸡蛋或灯塔,你需要问他们。这个任务可以是异步的:你可以先问第一个,然后再问第二个,然后用一个或两个平底锅煮面包,然后在煮鸡蛋/灯塔之前检查答案。如果没有异步,您必须等待答案(可能在线程中)才能烹饪面包(这是没有效率的)。
异步操作可以分成多个部分:
第二部分取决于语言/框架。此外,关于语言/框架,有时还包括等待任务完成的部分(阻塞操作)。它可以通过循环第2部分来完成,直到状态完成为止,但有时可以更有效地完成。
https://stackoverflow.com/questions/72142689
复制相似问题