DigLik.JobScheduler 1.0.1

dotnet add package DigLik.JobScheduler --version 1.0.1
                    
NuGet\Install-Package DigLik.JobScheduler -Version 1.0.1
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="DigLik.JobScheduler" Version="1.0.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="DigLik.JobScheduler" Version="1.0.1" />
                    
Directory.Packages.props
<PackageReference Include="DigLik.JobScheduler" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add DigLik.JobScheduler --version 1.0.1
                    
#r "nuget: DigLik.JobScheduler, 1.0.1"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package DigLik.JobScheduler@1.0.1
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=DigLik.JobScheduler&version=1.0.1
                    
Install as a Cake Addin
#tool nuget:?package=DigLik.JobScheduler&version=1.0.1
                    
Install as a Cake Tool

DigLik.JobScheduler

NuGet Version License

Экстремально быстрый, zero-allocation (без выделения памяти) и lock-free планировщик задач для .NET 10. Разработан специально для игровых движков, физических симуляций и высоконагруженных систем (HFT), где паузы сборщика мусора (GC) недопустимы.

Особенности

  • 🚀 Обходит Parallel.For: За счет умного авто-батчинга и адаптивного ожидания потоков.
  • 🗑️ 100% Zero Allocation: 0 байт выделенной памяти и 0 срабатываний GC во время работы планировщика. Никакого boxing'а и аллокаций делегатов.
  • 🧠 Lock-Free Архитектура: В основе лежат алгоритмы ABA-safe Treiber Stack и очередь кражи работы Chase-Lev Work-Stealing Deque.
  • 🔌 Чистый и безопасный API: Просто передайте свои данные как struct (без использования unsafe-кода), а планировщик сам всё оптимизирует.

Установка

Установите пакет через NuGet Package Manager:

dotnet add package DigLik.JobScheduler

Использование

1. Параллельная обработка массивов (Авто-батчинг)

Планировщик автоматически разрезает массив на оптимальные чанки (блоки) в зависимости от количества ядер вашего процессора для идеальной балансировки нагрузки.

using JobScheduler;

// 1. Определяем задачу как структуру (struct)
public struct ProcessArrayJob : IJob
{
    public double[] Data;

    public void Execute(int index)
    {
        // Параметр index указывает на текущий элемент массива
        Data[index] = Math.Sqrt(Data[index]);
    }
}

// 2. Инициализируем планировщик (обычно один раз на всё приложение)
using var scheduler = new Scheduler();

var data = new double[100_000];
var job = new ProcessArrayJob { Data = data };

// 3. Планируем задачу на весь массив и ждем завершения
var handle = scheduler.Schedule(in job, data.Length);
scheduler.Wait(handle);

2. Одиночные задачи и графы зависимостей

Для одиночных задач параметр index в методе Execute всегда будет равен 0.

public struct MathJob : IJob
{
    public void Execute(int index) 
    {
        // Сложные математические вычисления...
    }
}

var jobA = new MathJob();
var jobB = new MathJob();

// jobB автоматически дождется завершения jobA перед запуском
var handleA = scheduler.Schedule(in jobA);
var handleB = scheduler.Schedule(in jobB, dependency: handleA);

scheduler.Wait(handleB); // Ждем выполнения всей цепочки

Производительность (Бенчмарки)

Тестирование проводилось на процессоре Intel Core Ultra 9 285K (.NET 10.0.5).

Метод Кол-во задач Время (Mean) Ratio Выделено памяти (Allocated)
DigLik.JobScheduler (Наш) 500 11.12 us 0.80 - (0 B)
StandardParallelFor 500 13.93 us 1.00 5706 B
StandardTasksWhenAll 500 147.57 us 10.59 36205 B

DigLik.JobScheduler не только обходит стандартный Parallel.For по скорости на средних и больших объемах, но и гарантирует абсолютное отсутствие мусора в куче (Heap).

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net10.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.1 173 3/31/2026
1.0.0 145 3/18/2026