在单独的线程中运行同步http请求或只是运行异步http请求更好吗?

本文关键字:请求 运行 http 异步 更好 同步 单独 线程 | 更新日期: 2023-09-27 17:54:37

技术上是一样的。在单独的线程中运行同步例程实际上是异步运行它。但两者真的有区别吗?哪个更好?

在单独的线程中运行同步http请求或只是运行异步http请求更好吗?

使用异步版本的方法。它们已经被优化为使用最少的资源,并且在需要时可以有效地创建一个新的线程。一般来说,大多数异步方法最终在线程池中执行,这通常是一件好事。

绝对不同步。

技术上讲是一样的。

不,它不是。因为同步方法阻塞了线程,从而使它无法用于任何其他工作。异步释放线程,因此它可以做不同的工作。当异步完成时,它使用新线程。

对于简单的同步/异步调用来说,这不是什么大问题。当您运行数十甚至数千个调用时,使用async可能是非常有益的。你可以使用async同时产生更多的并行调用,因为这是由操作系统和框架本身处理的。如果您想并行运行调用,则需要编写自己的逻辑。

使用异步方法告诉框架在套接字上使用IO完成端口通知,然后当IO完成时,它在线程池上运行完成例程。

虽然使用了多线程,但它的使用效率很高,不需要为此目的创建额外的线程,也不需要占用一个线程来等待IO完成。

相比之下,经典的线程每连接机制创建一个新的新线程,用于等待IO完成,这是真正的资源浪费。

虽然两种方法之间的性能差异在简单的情况下是不可见的,但当您尝试扩展时,真正的差异就会显示出来。由于增加的开销,当每个连接的线程数超过几千个(甚至几百个)并发连接时,很难获得良好的性能。

异步请求针对这种行为进行了优化,需要较少的脑力劳动。

如果你创建一个单独的线程来同步运行一个请求,而不是调用异步版本,那么已经成功运行了一个异步请求

在循环中执行此操作,则成功杀死正在运行代码的服务器

然后你将开始创建你自己的线程池,同步机制等,以避免这种情况。

然后你可以说你已经重新发明了轮子,微软在你之前创造的:)