# Release Notes » Release 2.1.0 (2019/02/15)

Cpp-Taskflow 2.1.0 is the second release in the 2.x line! This release includes several new changes such as tf::Framework, tf::WorkStealingThreadpool, tf::SpeculativeThreadpool, allocators, benchmarks, and so forth. In addition, this release improved usability, stability, and performance.

## Download

Cpp-Taskflow 2.1.0 can be downloaded from here.

## New Features

- A new reuseable task dependency graph tf::Framework.
- New API (tf::Taskflow::run, tf::Taskflow::run_n, tf::Taskflow::run_until) to execute a framework

## Improvements and Enhancements

- Improved the performance of tf::WorkStealingThreadpool (non-blocking notifier, work stealing strategy, etc.)
- Changed the data structure to store nodes and topologies to std::list.
- Added memory pool and allocator to manage the memory allocation of nodes and topologies.
- Added a customized vector (PassiveVector) to hold POD data.
- Added a dependents vector to keep track of the predecessors, in addition to successors, of a node.
- Added more examples to demonstrate the usage of Cpp-Taskflow.
- Added a benchmarking environment with comparison to OpenMP and Intel TBB libraries (micro-benchmarks and machine learning)
- Removed the target node from a topology.

## Breaks and Deprecated Features

- tf::Taskflow::emplace is now merged with tf::Taskflow::silent_emplace (both are the same) and no longer returns std::future in order to support tf::Framework

## Bug Fixes

There are no major bug fixes in this release.

Tab / T to search, Esc to close
…

Search for symbols, directories, files, pages or modules. You can omit any prefix from the symbol or file path; adding a `:` or `/` suffix lists all members of given symbol or directory.

Use ↓ / ↑ to navigate through the list, Enter to go. Tab autocompletes common prefix, you can copy a link to the result using ⌘ L while ⌘ M produces a Markdown link.

Sorry, nothing was found.