Giter VIP home page Giter VIP logo

scheduler's Introduction

Планировщик

Описание

Класс Scheduler, управляющий ленивым вычислением связанных между собой задач. Задачи могут зависеть друг от друга, и будущий результат выполнения одной задачи может быть использован в качестве параметра для другой.

Пример использования

Рассмотрим пример нахождения корней квадратного уравнения:

float a = 1;
float b = -2;
float c = 0;

sched::Scheduler scheduler;

auto id1 = scheduler.add([](float a, float c){return -4 * a * c;}, a, c);
auto id2 = scheduler.add([](float b, float v){return b * b + v;}, b, scheduler.get_future_result<float>(id1));
auto id3 = scheduler.add([](float b, float d){return -b + std::sqrt(d);}, b, scheduler.get_future_result<float>(id2));
auto id4 = scheduler.add([](float b, float d){return -b - std::sqrt(d);}, b, scheduler.get_future_result<float>(id2));
auto id5 = scheduler.add([](float a, float v){return v/(2*a);}, a, scheduler.get_future_result<float>(id3));
auto id6 = scheduler.add([](float a, float v){return v/(2*a);},a, scheduler.get_future_result<float>(id4));

scheduler.execute_all();

std::cout << "x1 = " << scheduler.get_result<float>(id5) << std::endl;
std::cout << "x2 = " << scheduler.get_result<float>(id6) << std::endl;

Публичный интерфейс Scheduler

add()

template <typename Fn, typename... Args>
TaskId add(Fn&& fn, Args&&... args);

Добавляет задачу в планировщик.

Параметры

Имя Тип Описание
fn typename Fn Функция, для выполнения в качестве задачи.
args typename... Args Аргументы для передачи в fn.

Возвращаемое значение

Идентификатор задачи типа TaskId.

get_future_result()

template <typename ReturnType>
FutureResult<ReturnType> get_future_result(TaskId id);

Возвращает объект соответствующий будущему результату выполнения задачи. Используется для передачи в другую задачу ещё не подсчитанного результата выполнения данной.

Параметры

Имя Тип Описание
id TaskId Идентификатор задачи.

Возвращаемое значение

Объект типа FutureResult<ReturnType>.

get_result()

template <typename ReturnType>
ReturnType& get_result(TaskId id);

Возвращает результат выполнения задачи типа ReturnType, вычисляет его, если он еще не был подсчитан.

Параметры

Имя Тип Описание
id TaskId Идентификатор задачи.

Возвращаемое значение

Ссылка на результат выполнения задачи.

execute_all()

void execute_all();

Выполняет все запланированные задачи.

remove()

void remove(TaskId id);

Удаляет задачу из планировщика.

Параметры

Имя Тип Описание
id TaskId Идентификатор задачи.

Требования и ограничения

  • Задачи должны быть Callable objects (возможно, move-only).
  • Возвращаемое значение CopyConstructible.
  • Аргументы могут быть move-only.

Тестирование

Код покрыт unit-тестами при помощи gtest.

scheduler's People

Contributors

hashlag avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.