我使用ServiceStack.Core在Windows和Ubuntu中测试并发性,它们最多具有6个并发性,如何设置以提高并发性?
public class AppHost : AppHostBase
{
...
}
public static void Main(string[] args)
{
var host = new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseStartup<Startup>()
.UseUrls("http://localhost:1337/")
.Build();
host.Run();
}
[Route("/test")]
public class Test { }
public object Get(Test request)
{
System.Threading.Thread.Sleep(3000);
return '';
}
答案 0 :(得分:1)
注意:在具有自己的Max concurrency limits的浏览器中测试并发不是一个好主意。使用类似wrk
或ab
的Apache Bench。
ServiceStack在.NET Core中没有单独的并发模型,也没有为每个请求生成新线程,它仅使用.NET Core的Kestrel配置的并发性。
以前,在ASP.NET Core 1.1中,您可以在配置Kestrel时指定ThreadCount
:
var host = new WebHostBuilder()
.UseKestrel(options => options.ThreadCount = 10)
其中指定用于处理请求的libuv I / O线程数,默认为ProcessorCount的一半
尽管ThreadCount已被移动,并且仅当您配置Kestrel以使用Libuv Transport时可用:
WebHost.CreateDefaultBuilder(args)
.UseLibuv(options => {
options.ThreadCount = 10;
})
注意from .NET Core 2.1 Kestrel uses Managed Sockets表示默认传输方式不是Kestrel。