首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >单线程和异步混淆

单线程和异步混淆
EN

Stack Overflow用户
提问于 2022-05-06 13:57:32
回答 1查看 91关注 0票数 0

我读过不同的文章和类似的问题,我知道这两个概念是不同的,但我似乎不知道正确的答案。

据我所知,thread是按工人数量计算的,而sync/async是按任务顺序计算的。我想问一下我的理解是否正确,举下面的例子。

得做个三明治。

eggs.

  • Combine.

  1. 烤面包
  2. 烤面包

一个线==一个煎锅。

  • Single-thread &
    1. 把面包放在煎锅上,
    2. 看着面包都烤好了。
    3. 面包烤好了,把面包从平底锅里拿出来,把鸡蛋放在那个pan.

上。

  • Multi-thread &异步:
    1. 多个锅。
    2. 把面包和鸡蛋放在不同的锅上,respectively.
    3. No不管你先放什么,拿出完成的one.

  • Single-thread &异步:
    1. One锅。
    2. 把面包放在平底锅上。
    3. 面包没有全部烤好,但暂时放在一边,把鸡蛋放在那个平底锅上。
    4. 鸡蛋不是全煎的,但我就把它们放一边,放在pan.
    5. Repeat...

上。

  • Multi-thread &
    1. 有几个平底锅,但我们先在pan1上烤面包。
    2. ,pan1上的面包吃完后,用pan2.

煎鸡蛋。

我的理解正确吗?

+)如果是这样的话,像javascript这样的单线程/异步的情况下,事件循环中的任务只是在队列中等待,没有进展,对吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-06 16:18:08

这个例子很好,也很有趣。别忘了以后再拿另一个做“多线程和异步”,否则它会被烧掉;)。否则,在我看来,这似乎是正确的。

但是,这个示例对于“单线程&异步”的情况不是很好,它可能是混乱的根源。在实践中,异步不保证抢占(鸡蛋和面包之间的切换)。这通常是合作进行的。问题是,在你的例子中,面包是不能煮的,而鸡蛋是因为只有一个锅。实际上,像I/O操作这样的任务可以在不使用任何核心(即。(潘)

异步主要用于避免等待任务完成,而其他一些事情可以完成。它对于计算任务并没有真正的用处。例如,如果你为两个朋友做了两个三明治,而你不知道他们是否喜欢鸡蛋或灯塔,你需要问他们。这个任务可以是异步的:你可以先问第一个,然后再问第二个,然后用一个或两个平底锅煮面包,然后在煮鸡蛋/灯塔之前检查答案。如果没有异步,您必须等待答案(可能在线程中)才能烹饪面包(这是没有效率的)。

异步操作可以分成多个部分:

  1. 启动请求(例如。向friend)
  2. checking发送一条状态或触发事件的消息(例如。检查你的朋友的信息或在received)
  3. completing请求时对他们作出反应(例如。开始摆弄你的朋友想要的东西),这可以包括启动新的请求(在1.中完成)

第二部分取决于语言/框架。此外,关于语言/框架,有时还包括等待任务完成的部分(阻塞操作)。它可以通过循环第2部分来完成,直到状态完成为止,但有时可以更有效地完成。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72142689

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档