首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何允许多个用户以良好的响应时间同时执行冗长的mvc3操作?

如何允许多个用户以良好的响应时间同时执行冗长的mvc3操作?
EN

Stack Overflow用户
提问于 2012-07-09 20:16:50
回答 1查看 903关注 0票数 1

我对此有3-4个相关的问题。

  1. 如果X行正在使用同步上传方法,那么:-a。将如何处理来自同一用户(同一会话)的另一项请求:

代码语言:javascript
运行
复制
- An action method different from the \_UploadStatement? - Will it be queued or served simultaneously?
- The same action method i.e. \_UploadStatement? - Will it be put into a queue or served simultaneously?

b.将如何处理来自不同用户(不同会议)的另一项请求:

代码语言:javascript
运行
复制
- An action method different from the \_UploadStatement? - Will it be queued or served simultaneously?
- The same action method i.e. \_UploadStatement? - Will it be put into a queue or served simultaneously?

如果它们被放入队列中,那么这意味着下一个用户将不得不等待第一个用户的上传完成?

公共类AbcController :控制器{公共ActionResult A1() {返回视图();}公共JsonResult _UploadStatement(HttpPostedFileBase UploadedStatement) { //某个web服务,将接收到的冗长文件上载到其他服务器(例如亚马逊s3存储):- // LINE X}}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-09 20:24:05

这些行动将并行进行。每次IIS收到新请求时,它都会创建一个新控制器,并对新的控制器实例执行该操作。但是,每个控制器将使用不同的线程执行请求。

只有当您有这样的代码时,用户B才不得不等待用户A完成他的上传:

代码语言:javascript
运行
复制
public class AbcController : Controller  
{  
  private static readonly object Lock = new object();

  public ActionResult A1()  
  {  
    return view();  
  }  

  public JsonResult _UploadStatement(HttpPostedFileBase UploadedStatement)  
  {  
    lock (Lock) 
    {
        // Some web service uploading a lengthy file received to other server (say amazon s3 storage):-  
        // LINE NUMBER - X  
    }
  }  
}

这样的锁会告诉线程:“嘿,一次只允许我们一个人执行这个方法,现在我已经锁定了这个方法,你必须等到我完成之后再把锁给你,然后你就可以执行这个方法,让其他人等你完成。”

操作方法不知道或不关心请求来源于谁。如果用户A提交了3个上传,IIS将使用不同的线程并行执行它们。但是,它可能不会按照请求的顺序返回结果。例如,第二个请求可以先完成,然后完成第三个,最后完成第一个。

然而,可能发生的是线程饥饿。假设你有50个用户同时上传3个文件。这意味着至少有150个线程将从池中取出,这可能会导致应用程序的其他部分响应得更慢。您可以查看从AsyncController扩展到帮助处理严重I/O绑定或由于线程阻塞而潜在的任务的线程饥饿场景。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11402431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档