线性程序中的异步/等待与阻塞是不是会影响其他应用程序的性能?

Posted

技术标签:

【中文标题】线性程序中的异步/等待与阻塞是不是会影响其他应用程序的性能?【英文标题】:Does async/await vs blocking in a linear program influence performance of other applications?线性程序中的异步/等待与阻塞是否会影响其他应用程序的性能? 【发布时间】:2021-06-23 16:53:00 【问题描述】:

我有一个控制台应用程序正在以线性方式进行 Web 请求和数据库调用,然后关闭。所以理论上没有太多的多线程发生。

因为它与 IronPython 交互,所以它并不能很好地支持 async/await。

如果我让整个应用程序阻塞而不是异步/等待 - 这对在同一服务器上运行的其他应用程序的资源消耗有任何影响吗(Azure 应用服务)?

【问题讨论】:

如果您有 CPU 密集型工作(光线追踪、进行核模拟等),那么将其分配给与机器上的虚拟内核一样多的线程将使您的应用程序更加高效和会减慢其他用户/应用程序的速度。如果你有 I/O 绑定的工作,并且你没有“保持 UI 响应”的要求,也没有其他责任(比如让其他网络用户开心),那么只做有效且最容易维护的工作。 【参考方案1】:

我不这么认为。

你的主线程要么被阻塞,然后被释放,然后被阻塞等等,这对系统几乎产生零影响,

或者,您的线程池选择一个线程,释放它,然后另一个,再次释放,然后可能又是另一个,依此类推,所有这些都来自池,这再次产生零影响。

【讨论】:

这是假设所有正在完成的工作都是由线程池线程完成的 CPU 绑定工作。不过,问题不是针对这种情况的任务,它具体表明该工作实际上不是那种类型的工作。 @Servy 好吧,“即数据库请求和 Web 请求”本身不受 CPU 限制。 没错,这就是为什么这个答案是完全错误的。

以上是关于线性程序中的异步/等待与阻塞是不是会影响其他应用程序的性能?的主要内容,如果未能解决你的问题,请参考以下文章

swoole与php协程实现异步非阻塞IO开发

nginx异步非阻塞理解

同步 异步 阻塞 非阻塞 的概念

网络编程模型(I/O模型)

同步异步与阻塞非阻塞

爬虫速度太慢?来试试用异步协程提速吧!