如何增加ServiceStack.Core的并发性

时间:2019-04-02 03:22:12

标签: servicestack

我使用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

1 个答案:

答案 0 :(得分:1)

注意:在具有自己的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 Transport时可用:

WebHost.CreateDefaultBuilder(args)
    .UseLibuv(options => {
        options.ThreadCount = 10;
    })

注意from .NET Core 2.1 Kestrel uses Managed Sockets表示默认传输方式不是Kestrel。