Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 线程与异步执行。什么';有什么不同?_Multithreading_Performance_Asynchronous - Fatal编程技术网

Multithreading 线程与异步执行。什么';有什么不同?

Multithreading 线程与异步执行。什么';有什么不同?,multithreading,performance,asynchronous,Multithreading,Performance,Asynchronous,我相信任何类型的异步执行都会在不可见区域生成线程。但如果是这样 异步代码不会比线程代码提供任何性能增益 但我不明白为什么这么多开发人员将许多功能设置为异步形式。 您能解释一下它们的区别和成本吗?异步执行的目的是防止调用异步方法的代码(前台代码)被阻塞。这允许前台代码在异步线程在后台执行请求的工作时继续执行有用的工作。如果没有异步执行,前台代码必须等到后台任务完成后才能继续执行 异步执行的成本与线程上运行的任何其他任务的成本相同 通常,异步结果对象使用前台代码注册。异步结果对象可以在后台任务完

我相信任何类型的异步执行都会在不可见区域生成线程。但如果是这样

  • 异步代码不会比线程代码提供任何性能增益
但我不明白为什么这么多开发人员将许多功能设置为异步形式。
您能解释一下它们的区别和成本吗?

异步执行的目的是防止调用异步方法的代码(前台代码)被阻塞。这允许前台代码在异步线程在后台执行请求的工作时继续执行有用的工作。如果没有异步执行,前台代码必须等到后台任务完成后才能继续执行

异步执行的成本与线程上运行的任何其他任务的成本相同


通常,异步结果对象使用前台代码注册。异步结果对象可以在后台任务完成时引发事件,或者前台代码可以定期检查异步结果对象以查看其完成标志是否已设置。

异步执行的目的是防止调用异步方法的代码(前台代码)被阻止。这允许前台代码在异步线程在后台执行请求的工作时继续执行有用的工作。如果没有异步执行,前台代码必须等到后台任务完成后才能继续执行

异步执行的成本与线程上运行的任何其他任务的成本相同

通常,异步结果对象使用前台代码注册。异步结果对象可以在后台任务完成时引发事件,或者前台代码可以定期检查异步结果对象以查看其完成标志是否已设置

  • 异步代码不会比线程代码提供任何性能增益
异步执行是多线程执行的特征之一,随着处理器装入更多内核,多线程执行变得越来越重要

对于服务器来说,多核只是略微相关的,因为它们在编写时已经考虑到并发性,并且会自然地扩展,但多核对于桌面应用程序来说尤其相关,桌面应用程序传统上只同时做一些事情——通常只是一个前台任务和一个后台线程。现在,如果它们要利用多核cpu的强大功能,就必须对它们进行编码以同时完成许多事情

至于单核上的性能,异步任务会像顺序运行一样降低系统的速度(这是一种简化,但在大多数情况下是正确的)。因此,在单核上运行任务a(需要10秒)和任务B(需要5秒),如果B是否异步运行,则所需的总时间将为15秒。原因是,当B运行时,它会从A拿走cpu资源,A和B竞争相同的cpu

对于多核机器,额外的任务在其他未使用的核上运行,因此情况有所不同-额外的任务不会真正占用任何时间-或者更准确地说,它们不会从运行任务a的核上占用时间。因此,在多核上异步运行任务a和B只需要10秒,而不是单核上的15秒。B的执行与A同时运行,并且在单独的内核上运行,因此A的执行时间不受影响

随着任务和核心数量的增加,性能的潜在改进也会增加。在并行计算中,利用并行性来提高性能被称为

我们已经看到64核CPU,预计几年后我们将拥有1024核。与单线程同步情况相比,这是1024倍的潜在加速。因此,为了回答您的问题,使用异步执行显然可以提高性能

  • 异步代码不会比线程代码提供任何性能增益
异步执行是多线程执行的特征之一,随着处理器装入更多内核,多线程执行变得越来越重要

对于服务器来说,多核只是略微相关的,因为它们在编写时已经考虑到并发性,并且会自然地扩展,但多核对于桌面应用程序来说尤其相关,桌面应用程序传统上只同时做一些事情——通常只是一个前台任务和一个后台线程。现在,如果它们要利用多核cpu的强大功能,就必须对它们进行编码以同时完成许多事情

至于单核上的性能,异步任务会像顺序运行一样降低系统的速度(这是一种简化,但在大多数情况下是正确的)。因此,在单核上运行任务a(需要10秒)和任务B(需要5秒),如果B是否异步运行,则所需的总时间将为15秒。原因是,当B运行时,它会从A拿走cpu资源,A和B竞争相同的cpu

对于多核机器,额外的任务在其他未使用的核上运行,因此情况有所不同-额外的任务不会真正占用任何时间-或者更准确地说,它们不会从运行任务a的核上占用时间。因此,在多核上异步运行任务a和B只需要10秒,而不是单核上的15秒。B的执行与A同时运行,并且在单独的内核上运行,因此A的执行时间不受影响

随着任务和核心数量的增加,性能的潜在改进也会增加。在并行计算中,利用并行性来提高性能被称为

我们已经看到64核的CPU,预计在一个系统中,我们将有1024核的通用CPU