Windows服务中的异步编程,是否相关



在windows服务中,我们没有任何阻塞的UI线程,那么在windows服务内使用异步编程是否相关??

备选方案是要么阻止(即,在所需数据可用之前什么都不做(,要么等待(产生处理,然后在数据可用时自动返回(。

在数据到达之前,程序(包括Windows服务(无法再做任何事情的情况下,两者之间似乎没有什么区别,就程序本身而言,这是真的。

但是,程序将在操作系统分配给它的线程中运行(即使它只使用一个线程(。线程不是空闲资源,如果大量线程正在使用,操作系统将不会分发新线程,直到旧线程终止或空闲。因此,其他项目将被搁置。

当程序阻塞时,它会保留线程,使其无法在其他地方使用。当它等待时,线程变为可供其他人使用。

因此,使用wait将使整个计算机更有效地运行。

异步编程允许在线程执行阻塞任务时高效使用线程。阻塞发生在ui中,但也发生在执行IO时,因此也发生在通信时。

如果您的服务不执行繁重的IO,也不使用套接字和管道,那么您在服务中就没有任何好处;尽管我无法想象这样的服务能做什么。

一般来说,异步编程在托管系统中也有好处,因为它允许全局使用更少的资源来运行工作负载。然而,您必须考虑异步编程不会像其他答案中所说的那样执行任何资源共享:您的实现将以更高效的方式(即面向任务(使用您的线程,但您不会神奇地拥有更多可用的线程。

这两件事没有关联。

大多数Windows服务没有gui线程,因为它们没有gui。相反,它们将有一个主线程,可能还有许多其他实现服务的子线程。这些线程中的任何一个都可能希望使用异步编程技术。例如,它们可能在套接字上进行读取或写入,这是使用异步编程模型的经典示例。

相关内容

最新更新