Yet another implementation of AtomicLong
Project description
Yet another implementation of AtomicLong class.
Introduction
Class that allows to update long value atomically. Highly inspired by Java’s AtomicLong class and atomic package. The most of performance is gained by using Cython with the pure Python fallback available (you do not want to use it).
Examples:
>> counter = atomicl.AtomicLong() >> counter += 2 >> counter.value 2 >> counter.get_and_set(5) 2 >> counter.value 5
Differences from atomic
atomic is a more mature library and is battle-tested.
Despite small API differences, the huge difference between atomic and atomicl is comparisons operations support. atomicl does not supports comparison and, for now, I do not see reasons to have it. I tend to agree with folks from java on this topic.
atomic is backed by CFFI which makes it a good choice for CPython and PyPy. atomicl with Cython extension gains better performance on CPython and performs worse on PyPy. See Benchmarks for more details.
Benchmarks
Results for benchmarks.py on OS X 10.12.6 (16G29) with Intel(R) Core(TM) i5-5257U CPU @ 2.70GHz and turbo boost disabled:
Python 3.6.2:
atomic#ctor_default: Mean +- std dev: 1.64 us +- 0.05 us atomicl.py#ctor_default: Mean +- std dev: 1.13 us +- 0.02 us atomicl.cy#ctor_default: Mean +- std dev: 260 ns +- 10 ns atomic#ctor: Mean +- std dev: 1.65 us +- 0.03 us atomicl.py#ctor: Mean +- std dev: 1.17 us +- 0.03 us atomicl.cy#ctor: Mean +- std dev: 286 ns +- 4 ns atomic#increment: Mean +- std dev: 740 ns +- 16 ns atomicl.py#increment: Mean +- std dev: 1.34 us +- 0.02 us atomicl.cy#increment: Mean +- std dev: 210 ns +- 3 ns atomic#decrement: Mean +- std dev: 734 ns +- 23 ns atomicl.py#decrement: Mean +- std dev: 1.36 us +- 0.02 us atomicl.cy#decrement: Mean +- std dev: 209 ns +- 5 ns atomic#setter: Mean +- std dev: 1.79 us +- 0.04 us atomicl.py#setter: Mean +- std dev: 653 ns +- 14 ns atomicl.cy#setter: Mean +- std dev: 223 ns +- 3 ns atomic#cas: Mean +- std dev: 1.99 us +- 0.05 us atomicl.py#cas: Mean +- std dev: 1.33 us +- 0.02 us atomicl.cy#cas: Mean +- std dev: 318 ns +- 3 ns
Python 3.4.6:
atomic#ctor_default: Mean +- std dev: 1.81 us +- 0.04 us atomicl.py#ctor_default: Mean +- std dev: 1.29 us +- 0.02 us atomicl.cy#ctor_default: Mean +- std dev: 377 ns +- 12 ns atomic#ctor: Mean +- std dev: 1.88 us +- 0.07 us atomicl.py#ctor: Mean +- std dev: 1.32 us +- 0.02 us atomicl.cy#ctor: Mean +- std dev: 403 ns +- 7 ns atomic#increment: Mean +- std dev: 862 ns +- 26 ns atomicl.py#increment: Mean +- std dev: 1.48 us +- 0.04 us atomicl.cy#increment: Mean +- std dev: 353 ns +- 7 ns atomic#decrement: Mean +- std dev: 865 ns +- 22 ns atomicl.py#decrement: Mean +- std dev: 1.47 us +- 0.02 us atomicl.cy#decrement: Mean +- std dev: 353 ns +- 5 ns atomic#setter: Mean +- std dev: 1.84 us +- 0.05 us atomicl.py#setter: Mean +- std dev: 796 ns +- 23 ns atomicl.cy#setter: Mean +- std dev: 368 ns +- 3 ns atomic#cas: Mean +- std dev: 1.96 us +- 0.05 us atomicl.py#cas: Mean +- std dev: 1.34 us +- 0.03 us atomicl.cy#cas: Mean +- std dev: 448 ns +- 17 ns
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Hashes for atomicl-0.1.0-cp36-cp36m-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 30d7aedd4298119d0d1c1d71c7c60ed1c008de0bf342115d98fa55569e7941c0 |
|
MD5 | 82e03a12bfa36aaf16ab5f5ebbcc8953 |
|
BLAKE2b-256 | e27916d63bce61bfac876bff41b752e3b9025f330824e756edc3c05ca2051b1a |
Hashes for atomicl-0.1.0-cp35-cp35m-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | dedb52cf7d6bc688ae13a5e775a58967b49dec10731254d52a8bfd74ae01d9c4 |
|
MD5 | fe9cae2fd86f008378b41b5c650b3536 |
|
BLAKE2b-256 | 0545dcf0b87fa5bd755b52840327d612370fa730cbaa161f45c014da81fdd04f |
Hashes for atomicl-0.1.0-cp34-cp34m-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 37d80e9099dbaf4d37bf8a302acdf3b1185774dc63f9d85b8fd3b4c714c6d08f |
|
MD5 | 00c99868b45f260a6c8bf1192c7cfaae |
|
BLAKE2b-256 | b3b622dd7526f09d8359154476b0df8e4e146cbfdf035218368cfe32d03edc3d |
Hashes for atomicl-0.1.0-cp33-cp33m-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 22f1c7a6a8ea762ef4ac44b974b095670e3c619e3c38e0fb2d3e1d21edb75ebc |
|
MD5 | 610c227ba6d62b00c8cce97cfb7b7193 |
|
BLAKE2b-256 | 3224bf7fbbefb0ff0f68c31ebd72316cc1e03d16e22d3f2045381b1f04d6db4b |