如何提高ServiceStack.Core的并发
How to increase the concurrency of ServiceStack.Core
我用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 '';
}
Only 6 concurrent
CPU
注意:在有自己 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 传输时才可用:
WebHost.CreateDefaultBuilder(args)
.UseLibuv(options => {
options.ThreadCount = 10;
})
注意 from .NET Core 2.1 Kestrel uses Managed Sockets 默认传输不是 Kestrel。
我用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 '';
}
Only 6 concurrent
CPU
注意:在有自己 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 传输时才可用:
WebHost.CreateDefaultBuilder(args)
.UseLibuv(options => {
options.ThreadCount = 10;
})
注意 from .NET Core 2.1 Kestrel uses Managed Sockets 默认传输不是 Kestrel。