readablesystems / sto

Licence: MIT license
Software Transactional Objects

Programming Languages

C++
36643 projects - #6 most used programming language
shell
77523 projects
c
50402 projects - #5 most used programming language
M4
1887 projects
python
139335 projects - #7 most used programming language
CMake
9771 projects

Projects that are alternatives of or similar to sto

java-multithread
Códigos feitos para o curso de Multithreading com Java, no canal RinaldoDev do YouTube.
Stars: ✭ 24 (-40%)
Mutual labels:  concurrency, parallel-programming
SOMns
SOMns: A Newspeak for Concurrency Research
Stars: ✭ 62 (+55%)
Mutual labels:  concurrency, transactional-memory
concurrent-resource
A header-only C++ library that allows easily creating thread-safe, concurrency friendly resources.
Stars: ✭ 17 (-57.5%)
Mutual labels:  concurrency
atomix
Simple and easy wrappers for Go sync/atomic package.
Stars: ✭ 26 (-35%)
Mutual labels:  concurrency
wise-river
Object streaming the way it should be.
Stars: ✭ 33 (-17.5%)
Mutual labels:  concurrency
go-worker-thread-pool
A visual working example of a Thread Pool pattern, based on a known blog article.
Stars: ✭ 24 (-40%)
Mutual labels:  concurrency
benchmark-http
No description or website provided.
Stars: ✭ 15 (-62.5%)
Mutual labels:  concurrency
swift-futures
Demand-driven asynchronous programming in Swift
Stars: ✭ 32 (-20%)
Mutual labels:  concurrency
await async
Provide await and async methods to Crystal Lang
Stars: ✭ 71 (+77.5%)
Mutual labels:  concurrency
theater
Actor framework for Dart. This package makes it easier to work with isolates, create clusters of isolates.
Stars: ✭ 29 (-27.5%)
Mutual labels:  concurrency
treap
A thread-safe, persistent Treap (tree + heap) for ordered key-value mapping and priority sorting.
Stars: ✭ 23 (-42.5%)
Mutual labels:  concurrency
golang-101
🍺 In-depth internals, my personal notes, example codes and projects. Includes - Thousands of codes, OOP, Concurrency, Parallelism, Goroutines, Mutexes & Wait Groups, Testing in Go, Go tool chain, Backend web development, Some projects including Log file parser using bufio.Scanner, Spam Masker, Retro led clock, Console animations, Dictionary pro…
Stars: ✭ 61 (+52.5%)
Mutual labels:  concurrency
easy-promise-queue
An easy JavaScript Promise queue which is automatically executed, concurrency controlled and suspendable.
Stars: ✭ 31 (-22.5%)
Mutual labels:  concurrency
pygolang
Go-like features for Python and Cython. (mirror of https://lab.nexedi.com/kirr/pygolang)
Stars: ✭ 37 (-7.5%)
Mutual labels:  concurrency
detox
distributed tox (tox plugin to run testenvs in parallel)
Stars: ✭ 48 (+20%)
Mutual labels:  concurrency
jeelizPupillometry
Real-time pupillometry in the web browser using a 4K webcam video feed processed by this WebGL/Javascript library. 2 demo experiments are included.
Stars: ✭ 78 (+95%)
Mutual labels:  measurement
kotlin-concurrency-primitives
Demo project that showcases the usage of various concurrency primitives in Java and Kotlin.
Stars: ✭ 32 (-20%)
Mutual labels:  concurrency
udacity-IntroToParallelProgramming
CS344 - Introduction To Parallel Programming course (Udacity) proposed solutions
Stars: ✭ 36 (-10%)
Mutual labels:  parallel-programming
SqlInMemory
SqlInMemory is a library for creating SqlServer database on Memory instead of hard disk, at last Drops and Disposes database when you're done with it. This is useful for Integration Testing.
Stars: ✭ 24 (-40%)
Mutual labels:  inmemory-db
craft-webperf
Webperf helps you build & maintain high quality websites through Real User Measurement of your website's performance
Stars: ✭ 24 (-40%)
Mutual labels:  measurement

Build Status

STO: Software Transactional Objects

STO (/stō/, pronounced the same as "stow") is a software transactional memory (STM) library and experimental platform written in C++. STO distinguishes itself from other STM libraries in that it uses data type information derived from the programming language, thus drastically reducing footprint of transactions and false conflicts when compared to an untyped STM system. Please check out our EuroSys '16 paper for more information.

STO was created by Nathaniel Herman as a Harvard undergrad.

Installation

We tested our build on Linux (Ubuntu 16.04 LTS and later) only. Building on other platforms should technically be possible, because we use standard C++/POSIX calls and avoid hacks as much as we can. There is a known issue with Win32 object file format, so building under Windows (Cygwin or the Windows Subsystem for Linux in Windows 10) is not recommended.

Dependencies

  • Modern C++ compiler with C++14 support
    • If you use GNU C Compiler (g++), version 7.2+ is recommended.
  • GNU build system (autoreconf and make in particular)
  • cmake 3.8+ (Optional)
  • jemalloc
  • libnuma
  • ninja build system
  • masstree and third-party libraries (as git submodules)

Please refer to your own system documentation on how to install these dependencies prior to building STO. On Ubuntu 16.04 LTS or later, you can install all dependencies by using:

$ sudo apt update
$ sudo apt install build-essential cmake libjemalloc-dev libnuma-dev ninja-build

If you wish to install g++ version 7 on Ubuntu 16.04 or older systems, you can use the following PPA package:

$ sudo add-apt-repository ppa:ubuntu-toolchain-r/test
$ sudo apt update
$ sudo apt install g++-7

Build

  1. Clone the git repository
$ git clone https://github.com/readablesystems/sto.git
$ cd sto
  1. Initialize submodules
$ git submodule update --init --recursive
  1. Execute configuration scripts
$ ./bootstrap.sh
$ ./configure

The configure script lets you specify the compiler to use when building STO. For example, if g++-7 is not the default compiler in your system, you can enable it for STO by running ./configure CC=gcc-7 CXX=g++-7.

(Note: if you use macOS you should probably run ./configure CXX='clang++ -stdlib=libc++')

  1. Build
$ make -jN # launch N parallel build jobs

This builds all targets, which include all tests and benchmarks. If you don't want all of those, you can build selected targets as well.

Here are some targets you may find useful:

  • make check: Build and run all unit tests. This is the target used by continuous integration.
  • make tpcc_bench: Build the TPC-C benchmark.
  • make ycsb_bench: Build the YCSB-like benchmark.
  • make micro_bench: Build the array-based microbenchmark.
  • make clean: You know what it does.

See Wiki for advanced buid options.

IDE Support & cmake

STO contains cmake configuration files that can be used by IDEs like JetBrains CLion. You can potentially also use cmake to configure and build STO, but it is not recommended.

Full support for cmake will come soon.

Develop New Data Types

You can implement your own data type in STO to extend the transactional data type library. Please see the Wiki on how to implement a STO data type.

You can also take a look at datatype/TBox.hh for a simple example.

Bug Reporting

You can report bugs by opening issues or contacting Yihe Huang.

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].