如何提高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 的浏览器中测试并发不是一个好主意。使用 wrkab 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。