Releases: bloomberg/quantum
Releases · bloomberg/quantum
v2.2 Release
Description
- Added json schema for the sequencer configuration. #148
- Fix validity check on generic futures when they are default constructed. #147
- Added compile test for the
Promise
constructor. #146 - Added support for
Promise
in theGenericFuture
constructor. #145 - Allow generic futures to be accessed from coroutines and threads interchangeably. #144
- Refactored GenericFuture class using variants. Provide runtime checks. #142
- Fixed some header includes. #140
- Ensure coroutine stack size is a multiple of page size. #139
- Alloc coroutine stacks with MMAP. #138
- Ensure
Sequencer
returns success when running tasks. #137 - Prevent some compiler optimizations. #136
- Ensure proper catch/re-throw of coroutine stack unwind exceptions. #135
- ReadWriteLock upgradeToWrite fix for simultaneous upgrades. #134
- Added support for
DeferLock
inMutex
andSpinLock
classes. #133 - Return error if drain fails. #132
- Correctly set writer in
ReadWriteMutex::tryUpgradeToWrite()
. Add tests. #131 - Fixed assert statement in
SpinLock::lock()
. #130 - Updated
ReadWriteSpinlock
to be atomically upgrade-able from Reader to Writer. CreatedLockTraits
. #129 - Catch the right coroutine unwind exception. Terminate all coroutines on the same thread which started them. #128
SpinLock
improvements and TaskId. #127- Changed default infinite timeout to be -1 instead of 0. Updated
ConditionVariable::waitFor()
to match more closely the STL behavior. #126 - Added varargs to support non-default-constructible types in the Promise class. #125
- Use mutable temporary duration for
ConditionVariable::waitFor()
. #124
v2.1 Release
Description
- Added Travis tests for C++17 and upgraded to Ubuntu bionic distro for all tests. PR#122.
- Allow access to the coroutine context from within any function call and added
GenericFuture
util class. PR#117. - Added coroutine local storage (similar to thread local storage which cannot be used in certain modes such as coroutine sharing). PR#103 and PR#115. Thanks @demin80.
- Added drain functionality to the
Sequencer
class. PR#110 - Named all threads running in Quantum. PR#100
- Added shared coroutine mode which allows coroutines published to the any queue to be shared among all threads. This essentially allows a coroutine to run (suspend and resume) on different threads giving increased performance. Usage of
thread_local
should not be made in this mode. PR#96. Thanks @demin80. - Added
QUANTUM_EXPORT_PKGCONFIG
andQUANTUM_EXPORT_CMAKE_CONFIG
to control the creation of config files. PR#99. - Generate
QuantumConfig.cmake
,QuantumTargets.cmake
andQuantumConfigVersion.cmake
files which are exported in the default location${CMAKE_INSTALL_PREFIX}/share/cmake/Quantum
. This location can now be overwritten viaQUANTUM_CMAKE_CONFIG_DIR
. ExportQuantum::quantum
target which can be imported by 3rd-party projects and applications. PR#97. - Switch to using
steady_clock
for time interval measurements. PR#95 - Implement
ReadWriteSpinLock
. PR#90 - Reduce contention on the run queue and added
AllocatorTraits::ioQueueListAllocSize()
to control the pre-allocation buffers. PR#87
API changes
- V1 and V2 apis are now merged. V1 API is overloaded to take V2 signatures as well. PR#114 and PR#116.
- Automatically deduce return type for all invokable functions. PR#106
- Added support for compile-time determination of multiple function args. PR#107
Fixes
- Added move semantics to the
Quantum::Promise
class. PR#118 - Fix drain issue when last coroutine is still running. PR#113
- Check for buffer validity in
ContiguousPoolManager
and fixed move constructor forHeapPoolAllocator
. PR#112 - Fixed memory leaks in the
ContiguousPoolManager
as well asQuantum::Function
class. PR#104 - Fixed
INTERFACE_SOURCES
target property as it was hard-coded to what's generated in the build server. Once installed it would not longer point to the proper file. PR#100 - Changed empty condition signal to be under queue lock. PR#93
- Removed boost dependency from
pkg_config
file. PR#89
v2.0.1 Release
Description
Includes PR#85 which fixes issues with package config file generation.
v2.0 Release
Description
This is an API breaking release - see warnings below
- Added support for the V2 coroutine API which simplifies coroutine signatures and makes conversion from a regular function to a coroutine seamless, especially for async IO where no changes are needed! Both V1 (original) and V2 APIS can be used concurrently.
Sequencer::post()
andSequencer::postAll()
functions are now calledSequencer::enqueue()
andSequencer::enqueueAll()
. This is needed becauseSequencer::post()
is calling the newpost2()
API underneath and it would cause too much confusion. Also first parameter in the passed-in functor has changed fromCoroContextPtr<int>
toVoidContextPtr
. warning- Functors passed-in inside
forEach()/forEachBatch()/mapReduce()/mapReduceBatch()
now take an additional first parameterVoidContextPtr
. This is to allow creating other coroutines or yielding which was not possible before. See documentation for details. warning - Internal allocator improvements.
- Support for
_GLIBCXX_USE_CXX11_ABI
macro when determining if std::list::size() is linear or constant. - Rethrowing
const boost::coroutines2::detail::forced_unwind
exception to allow proper coroutine stack unwind in certain situations. - Added support for Boost segmented stacks and protected stacks.
- New macros for enabling various stacks at compile-time:
__QUANTUM_BOOST_USE_SEGMENTED_STACKS
,__QUANTUM_BOOST_USE_PROTECTED_STACKS
and__QUANTUM_BOOST_USE_FIXEDSIZE_STACKS
. - Deprecation of
__QUANTUM_USE_BOOST_CORO_ALLOCATOR
. warning - Removal of old
quantum::Dispatcher
constructor which did not take a configuration object. warning
v1.2 Release
Minor cmake
changes mainly to avoid pre-build step. As a result the src
directory was renamed quantum
.
v1.1 Release
This release does not contain any source code changes.
Description
- Updated header file guards to include full namespace
- Flattened
quantum/src/quantum/*
toquantum/src/*
- Updated Doxygen API documentation
Note: If the include path to the user application was pointing directly to the quantum/src
source directory, the code will no longer compile. Instead, the recommended way is to make install
and to include the install directory in your -I
include path.
v1.0 First release
Description
- This release contains the main functionality of the
quantum
coroutine dispatcher. Sequencer
util class for scheduling work items in parallel, which are then serialized within each parallel stream based on a user-specifiedsequenceId
.