Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果我们对asp.net/web api使用非异步而不是异步,内存消耗会有什么不同?_C#_Asp.net Web Api_Async Await - Fatal编程技术网

C# 如果我们对asp.net/web api使用非异步而不是异步,内存消耗会有什么不同?

C# 如果我们对asp.net/web api使用非异步而不是异步,内存消耗会有什么不同?,c#,asp.net-web-api,async-await,C#,Asp.net Web Api,Async Await,据我所知,CLR必须在线程池的线程被阻塞时创建一个新线程。每个线程占用内存约1mb。假设服务器每秒收到10K请求。在这种情况下,不使用async的内存消耗成本是多少?每当所有线程池线程都被阻塞时,CLR不会创建新线程。它“不情愿地”在一定范围内增长线程池 看 从.NETFramework4开始,线程池创建 销毁工作线程以优化吞吐量,这是 定义为单位时间内完成的任务数。太少 线程可能无法最佳利用可用资源,而 许多线程可能会增加资源争用 使用异步在内存消耗方面有什么好处吗 也许吧。如果有大量并发请

据我所知,CLR必须在线程池的线程被阻塞时创建一个新线程。每个线程占用内存约1mb。假设服务器每秒收到10K请求。在这种情况下,不使用async的内存消耗成本是多少?

每当所有线程池线程都被阻塞时,CLR不会创建新线程。它“不情愿地”在一定范围内增长线程池

从.NETFramework4开始,线程池创建 销毁工作线程以优化吞吐量,这是 定义为单位时间内完成的任务数。太少 线程可能无法最佳利用可用资源,而 许多线程可能会增加资源争用

使用异步在内存消耗方面有什么好处吗


也许吧。如果有大量并发请求等待后端资源,那么async允许您使用较少的线程处理这些请求。更少的线程意味着线程堆栈的内存更少。然而,并发请求本身消耗内存。因此,如果线程池减少了并发请求的数量,它还可以减少所使用的内存量。

每当所有线程池线程被阻塞时,CLR不会创建新线程。它“不情愿地”在一定范围内增长线程池

从.NETFramework4开始,线程池创建 销毁工作线程以优化吞吐量,这是 定义为单位时间内完成的任务数。太少 线程可能无法最佳利用可用资源,而 许多线程可能会增加资源争用

使用异步在内存消耗方面有什么好处吗


也许吧。如果有大量并发请求等待后端资源,那么async允许您使用较少的线程处理这些请求。更少的线程意味着线程堆栈的内存更少。然而,并发请求本身消耗内存。因此,如果线程池减少了并发请求的数量,它还可以减少所使用的内存量。

10000个请求/秒*0,1秒/请求=平均并发处理1000个请求

通过不使用异步,每个请求将使用
线程池
中的一个线程,因此
线程池
最终将创建大约1000个线程来满足需求。因此,对于您的问题,即不使用异步的成本,并且假设异步情况下的线程数量足够小,可以忽略不计,那么答案是1000 x 1MB=1GB额外内存


或者,如果您使用此方法配置了根据请求毫不延迟地创建的线程数,则立即执行。

10000个请求/秒*0,1秒/请求=平均并发处理1000个请求

通过不使用异步,每个请求将使用
线程池
中的一个线程,因此
线程池
最终将创建大约1000个线程来满足需求。因此,对于您的问题,即不使用异步的成本,并且假设异步情况下的线程数量足够小,可以忽略不计,那么答案是1000 x 1MB=1GB额外内存


或者,如果您使用该方法配置在需要时立即创建的线程数。

服务一个请求平均需要多少时间?请求最终将进行1-2 db调用。比方说50-150毫秒。平均需要多少时间来处理一个请求?请求最终会发出1-2 db的呼叫。假设50-150毫秒。谢谢回复!使用异步在内存消耗方面有什么好处吗?是的,线程池队列可以在线程池决定扩展之前吸收大量挂起的工作。当您发现自己在摆弄线程池参数以“加快速度”时,您可能需要重新设计。我听说
async
对于这类事情非常好:)谢谢你的回复!使用异步在内存消耗方面有什么好处吗?是的,线程池队列可以在线程池决定扩展之前吸收大量挂起的工作。当您发现自己在摆弄线程池参数以“加快速度”时,您可能需要重新设计。我听说
async
对这类东西非常有用:)