- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
来自 使用 .Net 进行专业异步编程:
for (int nTry = 0; nTry < 3; nTry++)
{
try
{
AttemptOperation();
break;
}
catch (OperationFailedException) { }
Thread.Sleep(2000);
}While sleeping, the thread doesn’t consume any CPU-based resources, but the fact that the thread is alive means that it is still consuming memory resources. On a desktop application this is probably no big deal, but on a server application, having lots of threads sleeping is not ideal because if more work arrives on the server, it may have to spin up more threads, increasing memory pressure and adding additional resources for the OS to manage.
Ideally, instead of putting the thread to sleep, you would like to simply give it up, allowing the thread to be free to serve other requests. When you are ready to continue using CPU resources again, you can obtain a thread ( not necessarily the same one ) and continue processing. You can solve this problem by not putting the thread to sleep, but rather using await on a Task that is deemed to be completed in a given period.
for (int nTry = 0; nTry < 3; nTry++)
{
try
{
AttemptOperation();
break;
}
catch (OperationFailedException) { }
await Task.Delay(2000);
}
我不遵循作者的推理。虽然调用 await Task.Delay
确实会释放这个线程(它正在处理一个请求),但由 Task.Delay
创建的任务也会占用一些其他线程也是真的要运行的线程。那么这段代码真的可以让服务器处理更多的并发请求还是文本错误?!
最佳答案
Task.Delay
不占用其他线程。它给你一个没有阻塞的任务。它启动一个计时器,在其回调中完成该任务。计时器在等待时不使用任何线程。
延迟或 IO 等异步操作只是将工作推送到不同的线程,这是一个常见的神话。他们不。他们使用操作系统工具在操作进行时真正使用零线程。 (他们显然需要使用一些线程来启动和完成操作。)
如果 async 只是将工作推送到不同的线程,那么它几乎是无用的。它的值(value)只是让用户界面在客户端应用程序中保持响应。在服务器上它只会造成伤害。不是这样的。
异步 IO 的值(value)在于减少内存使用(更少的线程堆栈)、上下文切换和线程池利用率。
您发布的代码的异步版本可以扩展到数以万计的并发请求(如果您适当增加 ASP.NET 限制,这是一个简单的 web.config 更改),内存使用量很小。
关于asp.net-mvc - 等待Task.Delay;真的使 Web 服务器能够处理更多的并发请求吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23939125/
我正在使用 Java 编写一个时钟程序,该程序能够“滴答作响”,但它存在问题。我认为它与 getter 和 setter 或 toString() 方法有关。 计数器类 package clock;
const Index = () => { // Ref Links const frefLinks = { 1: useRef(1), 2: useRef(2), 3: useRef(3
所以我读了here不能 pickle 装饰函数。确实: import multiprocessing as mp def deco(f): def wrapper(*args, **kwarg
我在go1.11.2 linux/amd64 版本。当包godog使用 go get github.com/DATA-DOG/godog/ 安装,godog 可执行文件在 $GOPATH/bin/中创
如何正确压缩字符串,以便 PHP 能够解压缩? 我试过这个: public static byte[] compress(String string) throws IOException {
我们这里的问题是表明 在测试中使用 Kleene 代数。 在 b 的值由 p 保留的情况下,我们有交换条件 bp = pb;两个程序之间的等价性简化为等式 在 b 的值不被 p 保留的情况下,我们有交
我有一个与我的网络相关的非常奇怪的问题,我在具有多个接口(interface)的 VirtualBox 上安装了 RDO Grizzly OpenStack。 虚拟盒子: eth0 - managem
我正在尝试使用 Passport.js授权谷歌OAuth2在 Node.js .我整个星期都在尝试让它工作,但不知道为什么它不工作,所以现在我求助于 stack 寻求一些潜在的帮助。我已经尝试了所有在
我是一名优秀的程序员,十分优秀!