All Projects → DanEngelbrecht → bikeshed

DanEngelbrecht / bikeshed

Licence: MIT license
Lock free hierarchical work scheduler

Programming Languages

C++
36643 projects - #6 most used programming language
c
50402 projects - #5 most used programming language
Batchfile
5799 projects
shell
77523 projects

Projects that are alternatives of or similar to bikeshed

Celery
Distributed Task Queue (development branch)
Stars: ✭ 18,378 (+23461.54%)
Mutual labels:  task-runner, task-manager, task-scheduler, queued-jobs, queue-workers, queue-tasks
celery.node
Celery task queue client/worker for nodejs
Stars: ✭ 164 (+110.26%)
Mutual labels:  task-runner, task-manager, queued-jobs, queue-workers
TaskManager
A C++14 Task Manager / Scheduler
Stars: ✭ 81 (+3.85%)
Mutual labels:  multithreading, task-manager, task-scheduler
reflow
A light-weight lock-free series/parallel combined scheduling framework for tasks. The goal is to maximize parallelism in order to minimize the execution time overall.
Stars: ✭ 23 (-70.51%)
Mutual labels:  task-runner, task-manager, task-scheduler
Dramatiq
A fast and reliable background task processing library for Python 3.
Stars: ✭ 2,844 (+3546.15%)
Mutual labels:  task-runner, task-manager, task-scheduler
Cron Manager
A PHP cron task manager for MVC-type applications
Stars: ✭ 396 (+407.69%)
Mutual labels:  task-runner, task-manager, task-scheduler
Dramatiq dashboard
A dashboard for dramatiq, specific to its Redis broker.
Stars: ✭ 82 (+5.13%)
Mutual labels:  task-runner, task-manager, task-scheduler
filequeue
light weight, high performance, simple, reliable and persistent queue for Java applications
Stars: ✭ 35 (-55.13%)
Mutual labels:  queued-jobs, queue-workers, queue-tasks
Object threadsafe
We make any object thread-safe and std::shared_mutex 10 times faster to achieve the speed of lock-free algorithms on >85% reads
Stars: ✭ 280 (+258.97%)
Mutual labels:  multithreading, lock-free
Weave
A state-of-the-art multithreading runtime: message-passing based, fast, scalable, ultra-low overhead
Stars: ✭ 305 (+291.03%)
Mutual labels:  multithreading, task-scheduler
Atomic queue
C++ lockless queue.
Stars: ✭ 373 (+378.21%)
Mutual labels:  multithreading, lock-free
MemoryAllocator.KanameShiki
Fast multi-threaded memory allocator
Stars: ✭ 73 (-6.41%)
Mutual labels:  multithreading, lock-free
Ten Hands
⚡ Simplest way to organize and run command-line tasks
Stars: ✭ 228 (+192.31%)
Mutual labels:  task-runner, task-manager
Concurrencpp
Modern concurrency for C++. Tasks, executors, timers and C++20 coroutines to rule them all
Stars: ✭ 340 (+335.9%)
Mutual labels:  multithreading, task-scheduler
Pelagia
Automatic parallelization (lock-free multithreading thread) tool developed by Surparallel Open Source.Pelagia is embedded key value database that implements a small, fast, high-reliability on ANSI C.
Stars: ✭ 1,132 (+1351.28%)
Mutual labels:  multithreading, lock-free
Swiftcoroutine
Swift coroutines for iOS, macOS and Linux.
Stars: ✭ 690 (+784.62%)
Mutual labels:  multithreading, lock-free
Pypyr
pypyr task-runner cli & api for automation pipelines. Automate anything by combining commands, different scripts in different languages & applications into one pipeline process.
Stars: ✭ 173 (+121.79%)
Mutual labels:  task-runner, task-manager
Fibertaskinglib
A library for enabling task-based multi-threading. It allows execution of task graphs with arbitrary dependencies.
Stars: ✭ 679 (+770.51%)
Mutual labels:  multithreading, task-scheduler
Left Right
A lock-free, read-optimized, concurrency primitive.
Stars: ✭ 1,245 (+1496.15%)
Mutual labels:  multithreading, lock-free
Px sched
Single Header C++11 Task Scheduler
Stars: ✭ 182 (+133.33%)
Mutual labels:  multithreading, task-scheduler
Branch OSX / Linux / Windows
master Build Status
master Codacy Badge

bikeshed

Lock free hierarchical work scheduler Builds with MSVC, Clang and GCC, header only, C99 compliant, MIT license.

See github for latest version: https://github.com/DanEngelbrecht/bikeshed

See design blogs at: https://danengelbrecht.github.io

Version history

Version v1.0 29/5 2019

Release 1.0

Fixes

  • Use explicit int32_t for instead of long to ensure 32-bit values on GCC/Clang x64-builds
  • Corrected URL to blog in README.md
  • Added sample code for performance tests (in examples folder)

Version v0.4 18/5 2019

Pre-release 4

API changes

  • Bikeshed_AddDependencies to take array of parent task task_ids
  • Bikeshed_ReadyCallback now gets called per channel range

API additions

  • Bikeshed_FreeTasks
  • BIKESHED_L1CACHE_SIZE to control ready head alignement - no padding/alignement added by default
  • BIKESHED_CPU_YIELD to control yielding in high-contention scenarios

Fixes

  • Added default (non-atomic) implementations for helper for unsupported platforms/compilers
  • Codacy analisys and badge
  • More input validation on public apis when BIKESHED_ASSERTS is enabled
  • Batch allocation of task indexes
  • Batch allocation of dependency indexes
  • Batch free of task indexes
  • Batch free of dependency indexes
  • Fixed broken channel range detection when resolving dependencies

Version v0.3 1/5 2019

Pre-release 3

Fixes

  • Ready callback is now called when a task is readied via dependency resolve
  • Tasks are readied in batch when possible

Version v0.2 29/4 2019

Pre-release 2

Fixes

  • Internal cleanups
  • Fixed warnings and removed clang warning suppressions
    • -Wno-sign-conversion
    • -Wno-unused-macros
    • -Wno-c++98-compat
    • -Wno-implicit-fallthrough
  • Made it compile cleanly with clang++ on Windows

Version v0.1 26/4 2019

Pre-release 1

Features

  • Generic tasks scheduling with dependecies between tasks
    • Each task has zero or many dependecies (as defined by user)
    • User should Ready any tasks that can execute (has zero dependencies)
    • Automatic ready of tasks that reaches zero dependecies
    • Automatic free of tasks that has completed
  • A task can have many parents and many child dependecies
  • Task channels - execute tasks based on task channel
  • No memory allocations once shed is created
  • Minimal dependencies
  • Memory allocation and threading are users responsability
  • Lifetime of data associated with tasks is users responsability
  • Configurable and optional assert (fatal error) behavior
  • Configurable platform dependant functions with default implementation provided
  • Header only - define BIKESHED_IMPLEMENTATION in one compilation unit and include bikeshed.h

Non-features

  • Cyclic dependency detection and resolving
    • API is designed to help user avoid cyclic dependecies but does not do any analisys
  • Built in threading or syncronization code - API to add it is available
  • Unlimited number of active tasks - currently limited to 8 388 607 active tasks
  • Cancelling of tasks
  • Tagging of tasks

Dependencies

Minimal dependecies with default overridable method for atomic operations.

  • <stdint.h>
  • <string.h>
  • The default (optional) MSVC implementation depends on <Windows.h>.

Optional default methods

The default implementations for the atomic and CPU yield functions can be overridden with your own implementation by overriding the macros:

  • BIKESHED_ATOMICADD Atomically adds a 32-bit signed integer to another 32-bit signed integer and returns the result
  • BIKESHED_ATOMICCAS Atomically exchange a 32-bit signed integer with another 32-bit signed integer if the value to be swapped matches the provided compare value, returns the old value.
  • BIKESHED_CPU_YIELD Yield CPU (mm_pause() / YieldProcessor()).

Test code dependecies

Test code has dependencies added as drop-in headers from

Test code has dependencies added as git sub-modules from

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].