您的位置:首页 > 编程语言 > C语言/C++

Algorithms & Data structures in C++& GO ( Lock Free Queue)

2017-11-23 23:40 696 查看
https://github.com/xtaci/algorithms

//已实现 ( Implemented ):

Array shuffle   https://github.com/xtaci/algorithms/blob/master/include/shuffle.h Prime test(trial division)  https://github.com/xtaci/algorithms/blob/master/include/prime.h Prime test(Miller-Rabin's method)   https://github.com/xtaci/algorithms/blob/master/include/prime.h 2D Array    https://github.com/xtaci/algorithms/blob/master/include/2darray.h Arbitrary Integer   https://github.com/xtaci/algorithms/blob/master/include/integer.h Linear congruential generator   https://github.com/xtaci/algorithms/blob/master/include/random.h Maximum subarray problem    https://github.com/xtaci/algorithms/blob/master/include/max_subarray.h Bit-Set https://github.com/xtaci/algorithms/blob/master/include/bitset.h Queue   https://github.com/xtaci/algorithms/blob/master/include/queue.h Stack   https://github.com/xtaci/algorithms/blob/master/include/stack.h Binary Heap https://github.com/xtaci/algorithms/blob/master/include/heap.h Fibonacci Heap  https://github.com/xtaci/algorithms/blob/master/include/fib-heap.h Priority Queue (list based) https://github.com/xtaci/algorithms/blob/master/include/priority_queue.h Bubble sort https://github.com/xtaci/algorithms/blob/master/include/bubble_sort.h Selection sort  https://github.com/xtaci/algorithms/blob/master/include/selection_sort.h Insertion sort  https://github.com/xtaci/algorithms/blob/master/include/insertion_sort.h Shell sort  https://github.com/xtaci/algorithms/blob/master/include/shell_sort.h Radix sort  https://github.com/xtaci/algorithms/blob/master/include/radix_sort.h Quicksort   https://github.com/xtaci/algorithms/blob/master/include/quick_sort.h Merge sort  https://github.com/xtaci/algorithms/blob/master/include/merge_sort.h Double linked list  https://github.com/xtaci/algorithms/blob/master/include/double_linked_list.h Skip list   https://github.com/xtaci/algorithms/blob/master/include/skiplist.h Largest common sequence https://github.com/xtaci/algorithms/blob/master/include/lcs.h Binary search tree  https://github.com/xtaci/algorithms/blob/master/include/binary_search_tree.h AVL tree    https://github.com/xtaci/algorithms/blob/master/include/avl.h Dynamic order statistics    https://github.com/xtaci/algorithms/blob/master/include/dos_tree.h Red-black tree  https://github.com/xtaci/algorithms/blob/master/include/rbtree.h Interval tree   https://github.com/xtaci/algorithms/blob/master/include/interval_tree.h Prefix Tree(Trie)   https://github.com/xtaci/algorithms/blob/master/include/trie.h Suffix Tree https://github.com/xtaci/algorithms/blob/master/include/suffix_tree.h B-Tree  https://github.com/xtaci/algorithms/blob/master/include/btree.h Suffix Array    https://github.com/xtaci/algorithms/blob/master/include/suffix_array.h Hash by multiplication  https://github.com/xtaci/algorithms/blob/master/include/hash_multi.h Hash table  https://github.com/xtaci/algorithms/blob/master/include/hash_table.h Universal hash function https://github.com/xtaci/algorithms/blob/master/include/universal_hash.h Perfect hash    https://github.com/xtaci/algorithms/blob/master/include/perfect_hash.h Java's string hash  https://github.com/xtaci/algorithms/blob/master/include/hash_string.h FNV-1a string hash  https://github.com/xtaci/algorithms/blob/master/include/hash_string.h SimHash https://github.com/xtaci/algorithms/blob/master/include/simhash.h Bloom Filter    https://github.com/xtaci/algorithms/blob/master/include/bloom_filter.h SHA-1 Message Digest Algorithm  https://github.com/xtaci/algorithms/blob/master/include/sha1.h MD5 https://github.com/xtaci/algorithms/blob/master/include/md5.h Base64  https://github.com/xtaci/algorithms/blob/master/include/base64.h Strongly Connected Components(SCC)  https://github.com/xtaci/algorithms/blob/master/include/scc.h Prim's minimum spanning tree    https://github.com/xtaci/algorithms/blob/master/include/prim_mst.h Kruskal MST https://github.com/xtaci/algorithms/blob/master/include/kruskal_mst.h Breadth First Search    https://github.com/xtaci/algorithms/blob/master/include/graph_search.h Depth First Search  https://github.com/xtaci/algorithms/blob/master/include/graph_search.h Dijkstra's algorithm    https://github.com/xtaci/algorithms/blob/master/include/dijkstra.h Bellman-Ford algorithm  https://github.com/xtaci/algorithms/blob/master/include/bellman_ford.h Edmonds-Karp Maximal Flow   https://github.com/xtaci/algorithms/blob/master/include/edmonds_karp.h Push–Relabel algorithm  https://github.com/xtaci/algorithms/blob/master/include/relabel_to_front.h Huffman Coding  https://github.com/xtaci/algorithms/blob/master/include/huffman.h Word segementation  https://github.com/xtaci/algorithms/blob/master/include/word_seg.h A* algorithm    https://github.com/xtaci/algorithms/blob/master/include/astar.h K-Means https://github.com/xtaci/algorithms/blob/master/include/k-means.h Knuth–Morris–Pratt algorithm    https://github.com/xtaci/algorithms/blob/master/include/kmp.h Disjoint-Set    https://github.com/xtaci/algorithms/blob/master/include/disjoint-set.h 8-Queue Problem https://github.com/xtaci/algorithms/blob/master/include/8queen.h Palindrome  https://github.com/xtaci/algorithms/blob/master/include/palindrome.h LCA using Binary Lifting    https://github.com/xtaci/algorithms/blob/master/include/LCA.h[/code] 

go-queue

前一久看到一篇文章美团高性能队列——Disruptor,时候自己琢磨了一下;经过反复修改,实现了一个相似的无锁队列EsQueue,该无锁队列相对Disruptor,而言少了队列数量属性quantity的CAP操作,因此性能杠杠的,在测试环境:windows10,Core(TM) i5-3320M CPU 2.6G, 8G 内存,go1.8.3,下性能达到1460-1600万之间。现在把代码发布出来,请同行验证一下,代码如下:

注:请注意本方法已经通过 go test -race, 无警告。
go1.8.3 amd64, Grp:   1, Times:   10000000, miss:     0, use:   573.9109ms,     57ns/op
go1.8.3 amd64, Grp:   2, Times:   20000000, miss:     0, use:   1.1548186s,     57ns/op
go1.8.3 amd64, Grp:   3, Times:   30000000, miss:     0, use:   1.6787567s,     55ns/op
go1.8.3 amd64, Grp:   4, Times:   40000000, miss:     0, use:   2.2651588s,     56ns/op
go1.8.3 amd64, Grp:   5, Times:   50000000, miss:     0, use:   2.8762257s,     57ns/op
go1.8.3 amd64, Grp:   6, Times:   60000000, miss:     0, use:   3.4914045s,     58ns/op
go1.8.3 amd64, Grp:   7, Times:   70000000, miss:     0, use:   4.0040473s,     57ns/op
go1.8.3 amd64, Grp:   8, Times:   80000000, miss:     0, use:   4.5712089s,     57ns/op
go1.8.3 amd64, Grp:   9, Times:   90000000, miss:     0, use:      5.1765s,     57ns/op
go1.8.3 amd64, Grp:  10, Times:   10000000, miss:     0, use:    586.914ms,     58ns/op
go1.8.3 amd64, Grp:  11, Times:   11000000, miss:     0, use:   644.4879ms,     58ns/op
go1.8.3 amd64, Grp:  12, Times:   12000000, miss:     0, use:   694.4974ms,     57ns/op
go1.8.3 amd64, Grp:  13, Times:   13000000, miss:     0, use:   745.5212ms,     57ns/op
go1.8.3 amd64, Grp:  14, Times:   14000000, miss:     0, use:   822.6344ms,     58ns/op
go1.8.3 amd64, Grp:  15, Times:   15000000, miss:     0, use:   868.4927ms,     57ns/op
go1.8.3 amd64, Grp:  16, Times:   16000000, miss:     0, use:   943.6699ms,     58ns/op
go1.8.3 amd64, Grp: Sum, Times:  541000000, miss:     0, use:  31.0982489s,     57ns/op


awesome-lockfree

Libraries

Boost.Lockfree - Boost lock-free data structures.

ConcurrencyKit - Concurrency primitives.

Folly - Facebook Open-source Library (has good implementation of MPMC queue).

Junction - Concurrent data structures in C++.

MPMCQueue - A bounded multi-producer multi-consumer lock-free queue written in C++11.

SPSCQueue - A bounded single-producer single-consumer wait-free and lock-free queue written in C++11.

Seqlock - Implementation of Seqlock in C++.

Userspace RCU - liburcu is a userspace RCU (read-copy-update) library.

libcds - A C++ library of Concurrent Data Structures.

Websites

1024cores - Dmitry Vyukov's website on lock-free programming.

LMAX Disruptor

Wikipedia: Non-blocking algorithm

Wikipedia: Read-copy-update

Wikipedia: Seqlock

Blogs

Concurrency Freaks - A web site dedicated to Concurrent algorithms and patterns.

Dan Luu - Lots of info on modern computer architecture.

Locking in Webkit

Mechanical Sympathy

Paul E. McKenney

Preshing on Programming

Sutter's Mill - Herb Sutter on software development.

Books

Paul E. McKenney. Is Parallel Programming Hard, And, If So, What Can You Do About It?

Papers

A Tutorial Introduction to the ARM and POWER Relaxed Memory Models

Paul E. McKenney. Memory Barriers: a Hardware View for Software Hackers.

Simple, Fast, and Practical Non-Blocking and Blocking Concurrent Queue Algorithms - The Michael - Scott Queue

Ulrich Drepper. What Every Programmer Should Know About Memory

x86-TSO: A Rigorous and Usable Programmer’s Model for x86 Multiprocessors

Talks

CppCon 2014: Herb Sutter "Lock-Free Programming (or, Juggling Razor Blades), Part I"

CppCon 2014: Herb Sutter "Lock-Free Programming (or, Juggling Razor Blades), Part II"

CppCon 2015: Fedor Pikus PART 1 “Live Lock-Free or Deadlock (Practical Lock-free Programming)"

CppCon 2015: Fedor Pikus PART 2 "Live Lock-Free or Deadlock (Practical Lock-free Programming)"

CppCon 2015: Michael Wong “C++11/14/17 atomics and memory model..."

CppCon 2015: Paul E. McKenney “C++ Atomics..."

CppCon 2014: Tony Van Eerd "Lock-free by Example"

CppCon 2016: Fedor Pikus "The Speed of Concurrency: is lock-free faster?"

CppCon 2016: Hans Boehm “Using weakly ordered C++ atomics correctly"

C++ and Beyond 2012: Herb Sutter - atomic<> Weapons, 1 of 2

C++ and Beyond 2012: Herb Sutter - atomic<> Weapons, 2 of 2

"Aeron: Open-source high-performance messaging" by Martin Thompson

Adventures with Concurrent Programming in Java: A Quest for Predictable Latency - Martin Thompson

Understanding the Disruptor, a Beginner's Guide to Hardcore Concurrency -Trisha Gee & Mike Barker
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: