Как увеличить параллелизм ServiceStack.Core - PullRequest
1 голос
/ 02 апреля 2019

Я использую 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 '';
}

Только 6 одновременно

CPU

1 Ответ

1 голос
/ 02 апреля 2019

Примечание: не рекомендуется проверять параллелизм в браузере, который имеет свои Максимальные ограничения параллелизма . Используйте что-то вроде wrk или ab Apache Bench.

ServiceStack не имеет отдельной модели параллелизма в .NET Core и не порождает новые потоки по запросу, он просто использует настроенный параллелизм Kestrel .NET Core.

Ранее в ASP.NET Core 1.1 вы могли указать ThreadCount при настройке Kestrel:

var host = new WebHostBuilder()
    .UseKestrel(options => options.ThreadCount = 10)

Где указывается количество потоков ввода-вывода libuv, используемых для обработки запросов, по умолчанию равное половине ProcessorCount

Хотя ThreadCount с тех пор был перемещен и доступен только в том случае, если вы сконфигурировали Kestrel для использования Libuv Transport:

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

Примечание из .NET Core 2.1 Kestrel использует управляемые сокеты для транспорта по умолчанию, а не Kestrel.

...