Javascript 线程与C#等线程语言上的异步?

Javascript 线程与C#等线程语言上的异步?,javascript,c#,multithreading,asynchronous,Javascript,C#,Multithreading,Asynchronous,我在看JavaScript的单线程异步处理和C#的线程异步处理方法之间的区别,如这里所述()。在我看来,“异步编码”可以概括为C#或Java等语言中“使用线程”的全部内容。是这样吗 我对线程的理解是同时在两个独立处理器上执行的代码,据我所知,这包括: 启动单独的进程 异步任务处理,以“现在”和“以后”为基础 将任务拆分为在单独线程上操作的部分任务,然后合并结果 在我看来,第2/3点以与JavaScript完全相同的逻辑方式有效地处理异步代码。虽然我(认为我)理解在“上下文”方面存在差异,需要添加

我在看JavaScript的单线程异步处理和C#的线程异步处理方法之间的区别,如这里所述()。在我看来,“异步编码”可以概括为C#或Java等语言中“使用线程”的全部内容。是这样吗

我对线程的理解是同时在两个独立处理器上执行的代码,据我所知,这包括:

  • 启动单独的进程
  • 异步任务处理,以“现在”和“以后”为基础
  • 将任务拆分为在单独线程上操作的部分任务,然后合并结果
  • 在我看来,第2/3点以与JavaScript完全相同的逻辑方式有效地处理异步代码。虽然我(认为我)理解在“上下文”方面存在差异,需要添加到新线程中?但它似乎是异步的-等待抽象,如果他们不…)

    除了我提到的,从JavaScript开发人员的角度来看,在处理异步代码方面有什么不同?从我对C#缺乏经验的角度来看,JavaScript中的异步编码似乎与C#中的多线程编码有许多相似之处。。虽然使用不同的用例。。。我能看到的一个区别是JavaScript中的代码从来不会与其他代码同时执行,而在C#中可能会-这就是“线程安全”概念的来源吗?i、 一个线程的状态不能被另一个线程上的操作改变(我认为)


    这是正确的吗?如果没有,区别是什么?

    异步和多线程都是并发的形式:

    • 并发性:一次做一件以上的事情
    • 异步:启动一个操作并释放当前线程来做其他事情,直到该操作完成
    • 并行/多线程:使用多个线程同时做多件事情
    我在看JavaScript的单线程异步处理和C#的线程异步处理之间的区别

    我相信我对那个问题的回答有点误导了你。当我谈到“异步多线程”时,我的意思是异步存在于多线程环境中。我的意思是,异步是使用多线程实现的

    JavaScript(目前)被锁定在一个单线程模型中(暂时将web workers之类类似线程的东西放在一边)。因此,异步自然是在单个线程上完成的。请注意,纯异步不需要异步操作的线程;e、 例如,当您执行web API调用时,没有线程需要等待响应返回。Node.js(以及浏览器JavaScript)使用了与我文章中类似的技术,加上一个线程池来包装少量的阻塞API

    这里需要注意的重要一点是异步不需要线程。原则上,它是一种无线程的并发形式。在服务器端,这允许很大程度的可伸缩性

    JavaScript到此为止,至少现在是这样。Node.js在单个线程上可以很好地扩展(不包括线程池),因为它强制异步。ASP.NET采用了一种不同的方法:异步在历史上一直是很难使用的,因此ASP.NET首先允许多线程,然后允许异步或同步代码;现代服务可以在多线程环境中使用异步,以获得更大的可伸缩性

    在我看来,“异步编码”可以概括为C#或Java等语言中“使用线程”的全部内容。是这样吗

    不,有一类工作不适合异步:CPU绑定算法。在这种情况下,您的“工作”具有必须在实际CPU上运行的实际CPU代码。如果你在做这样的事情,你需要真正的线程。在这种情况下,您需要并行性而不是异步性。并行性正在慢慢地进入JavaScript,但它们是从一个非常低的级别开始的,高级并行性成为一个可行的选项还需要相当长的时间

    旁注:C代码可以选择在一个线程上运行异步代码。事实上,这是客户端应用程序(桌面/移动设备上的UI应用程序)的默认环境。多线程异步环境通常仅在服务器上使用,例如ASP.NET

    我对线程的理解是同时在两个独立处理器上执行的代码

    它可以。这取决于机器中的磁芯以及机器的其他功能。NET提供了高级并行抽象,用于将您的工作划分为块,并将这些块分布在线程之间(线程在内核上运行),并以高度智能和自适应的方式完成所有这些工作。JavaScript目前没有这样的并行性支持

    在我看来,第2/3点以与JavaScript完全相同的逻辑方式有效地处理异步代码

    是的,除了JavaScript异步代码不能绑定CPU之外。例如,您可以使用.NET上的并行性来计算分形;仅使用
    async
    /
    wait
    (不考虑语言)无法完成此操作

    从我对C#缺乏经验的角度来看,JavaScript中的异步编码似乎与C#中的多线程编码有许多相似之处

    从高层次的角度来看,是的:它们都是并发的形式

    如果您的意思是JavaScript中的
    async
    /
    await
    与C#中的
    async
    /
    await
    类似,那么是的,它们实际上是一样的<代码>异步/
    等待
    用于在两种语言中实现异步

    虽然使用不同的用例。。。T