|
13
|
| theburningmonk · 技术社区 · 15 年前 |
|
|
1
16
看来,WCF使用来自clr threadpool的托管I/O线程来服务请求,附加的警告是使用自己的线程调度程序。 从 Wenlong Dong's Blog - Why Are WCF Responses Slow and SetMinThreads Does Not Work?
从 Wenlong Dong's Blog : WCF Request Throttling and Server Scalability
有过多的设置会影响到WCF吞吐量。因为wcf使用托管线程池,所以线程池的miniothreads和maxiothreads设置将影响结果。在所有空闲的I/O线程(如果使用这些线程,则为工作线程)从线程池中取出之后,线程池将延迟一段时间,然后再旋转一个新线程以服务排队的请求。通过增加miniothreads,可以防止这种延迟。如果您达到了maxiothread限制,这肯定会限制您将看到的并发请求的数量;但是,在50/100测试中似乎不是这样,因为您的下一个测试成功地运行了160个并发请求。如果我记得正确,我相信您使用的宿主环境(IIS、WAS、SELF)可以指定一些线程池设置。此外,如果您从第二个链接阅读博客文章,您将看到当WCF在其单独的I/O线程上处理请求时,如何阻止IIS工作线程。因此,在这种情况下,工作线程设置和IIS设置将对WCF并发性产生影响。你是如何主持这项服务的? 您的标题提到一个Percall InstanceContextMode,它将使ConcurrencyMode不相关。但是,对于PerCall,您需要了解MaxConcurrentInstances设置以及MaxConcurrentCalls。根据您的绑定,您可能还需要关注maxConcurrentSessions属性。您使用什么绑定来承载此服务? 不管以上这些,令人困惑的是,在50/100测试之后的160/200测试。 |