gpt4 book ai didi

c# - .net 中的异步方法 (!) 说明?

转载 作者:太空宇宙 更新时间:2023-11-03 13:45:12 25 4
gpt4 key购买 nike

我最近读了很多关于这个话题的书,但我仍然需要澄清一些事情

异步方法的整体思想是线程经济:

Allow many tasks to run on a few threads. this is done by using the hardware driver to do the job while releasing the thread back to the thread-pool so it can server other jobs.

请注意。

不是谈论绑定(bind)另一个线程的异步委托(delegate)(与调用者并行执行任务)。

不过,我见过 2 种主要类型的异步方法示例:

  • 仅将现有 I/O 异步操作用作beginXXX/endXX 的代码示例(来自书籍),例如Stream.BeginRead.
    而且我找不到任何使用现有.net I/O 操作的异步方法示例,例如Stream.BeginRead)

  • 代码示例,如 this (和 this )。它实际上并没有调用异步操作(尽管作者认为他是 - 但他实际上导致线程阻塞!)

问题:

异步方法是否仅用于 .net I/O 现有方法,如 BeginXXX 、 EndXXX

我的意思是,如果我想创建自己的异步方法,比如 BeginMyDelay(int ms,...){..} , EndMyDelay(...) .如果不将阻塞的线程绑定(bind)到它,我无法完成它......对吗?

非常感谢。

附注请注意这个问题被标记为 .net 4 而不是 .net4.5

最佳答案

你说的是 APM .APM 广泛使用 OS 概念,称为 IO Completion ports .这就是为什么不同的 IO 操作最适合使用 APM。

您可以编写自己的 APM 方法。但是,实际上,这些方法要么覆盖现有的 APM 方法,要么受 IO 限制,并使用一些 native 操作系统机制(如 FilesStream,它使用重叠的文件 IO)。

IMO,对于计算密集型异步操作,APM 只会增加复杂性。

再澄清一点。

使用硬件本质上是异步的。硬件需要时间来执行请求 - newtork 卡必须发送或接收数据,HDD 必须读/写等。如果 IO 是同步的,则生成 IO 请求的线程正在等待响应。 APM 在这里提供帮助 - 你不应该等待,只需执行其他操作,当 IO 完成时,我会调用你,APM 说。

要点 - 操作是在 CPU 之外执行的。

当您编写任何计算密集型操作时,它将使用 CPU 执行它而无需任何 IO,这里没有什么可等待的。所以,APM 没有帮助 - 如果你需要 CPU,你需要线程 - 你需要线程池。

关于c# - .net 中的异步方法 (!) 说明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15585344/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com