.net - SQL Server 中的异步处理与 .NET 异步处理

标签 .net sql-server asynchronous

在 SQL Server 中使用异步处理相对于 .NET 异步处理有什么优势?它们不是一样的吗?我很难理解在 SQL Server 中使用异步处理而不是 .NET APM 的好处是什么。我可以轻松地将 SQL 调用包装在 lambda 表达式中并执行 BeginInvoke(...)。

有人可以帮助我区分两者的区别和好处吗?

最佳答案

.NET 异步处理 (BeginInvoke(...)) 的问题在于,所有这些操作都是分出一个线程来同步处理代码。 5 分钟的查询将占用一个线程 5 分钟,阻塞(即大约 99% 的时间不执行任何操作),同时在远程端计算结果。在压力下(同时进行多个查询),这将耗尽线程池,使所有线程处于阻塞状态。线程池将变得无响应,并且新的工作请求将遭受很大的延迟,等待线程池启动额外的线程。这不是线程池的预期用途,因为它的设计预期要求它完成的任务是短暂且非阻塞的。

使用 Begin/EndAction APM 对,可以以非阻塞方式调用相同的操作,并且只有当结果通过 IO 完成端口返回时,它才会作为线程池中的工作项排队。在此期间,没有任何线程被占用,并且在处理排队响应时,数据可用,这意味着用户代码不会阻塞 IO,并且可以快速完成......更有效地使用线程池可以扩展到更多的客户端请求,而无需每个未完成操作的线程成本。

关于.net - SQL Server 中的异步处理与 .NET 异步处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1733027/

相关文章:

c# - 另一台机器的时间

c# - 如何从子类向基类的字段添加属性?

.NET SignalR 错误 : Cannot read property 'client' of undefined

c# - 无法使用 C# visual studio 2008 将数据插入表中

c# - 在 C# 中使代码异步

c# - 表达式调用和计数

sql - 如何将 XML 插入 SQL

sql - 如何将我的域用户帐户添加到有权连接到 SQL Server 的用户列表中?

javascript - 如何在我的 list 文件异步加载后加载页面 javascript

java - 异步日志缓冲区的实现