我对此有3-4个相关的问题。
- 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.将如何处理来自不同用户(不同会议)的另一项请求:
- 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}}
发布于 2012-07-09 20:24:05
这些行动将并行进行。每次IIS收到新请求时,它都会创建一个新控制器,并对新的控制器实例执行该操作。但是,每个控制器将使用不同的线程执行请求。
只有当您有这样的代码时,用户B才不得不等待用户A完成他的上传:
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绑定或由于线程阻塞而潜在的任务的线程饥饿场景。
https://stackoverflow.com/questions/11402431
复制相似问题