Algorithms & Data structures in C++& GO ( Lock Free Queue)
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
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
Algorithms & Data structures in C++& GO ( Lock Free Queue)的更多相关文章
- 剪短的python数据结构和算法的书《Data Structures and Algorithms Using Python》
按书上练习完,就可以知道日常的用处啦 #!/usr/bin/env python # -*- coding: utf-8 -*- # learn <<Problem Solving wit ...
- CSIS 1119B/C Introduction to Data Structures and Algorithms
CSIS 1119B/C Introduction to Data Structures and Algorithms Programming Assignment TwoDue Date: 18 A ...
- CSC 172 (Data Structures and Algorithms)
Project #3 (STREET MAPPING)CSC 172 (Data Structures and Algorithms), Spring 2019,University of Roche ...
- 学习笔记之Problem Solving with Algorithms and Data Structures using Python
Problem Solving with Algorithms and Data Structures using Python — Problem Solving with Algorithms a ...
- [Data Structures and Algorithms - 1] Introduction & Mathematics
References: 1. Stanford University CS97SI by Jaehyun Park 2. Introduction to Algorithms 3. Kuangbin' ...
- Basic Data Structures and Algorithms in the Linux Kernel--reference
http://luisbg.blogalia.com/historias/74062 Thanks to Vijay D'Silva's brilliant answer in cstheory.st ...
- Choose Concurrency-Friendly Data Structures
What is a high-performance data structure? To answer that question, we're used to applying normal co ...
- Persistent Data Structures
原文链接:http://www.codeproject.com/Articles/9680/Persistent-Data-Structures Introduction When you hear ...
- 无锁数据结构(Lock-Free Data Structures)
一个星期前,我写了关于SQL Server里闩锁(Latches)和自旋锁(Spinlocks)的文章.2个同步原语(synchronization primitives)是用来保护SQL Serve ...
随机推荐
- 规范-Git打标签与版本控制
Git打标签与版本控制规范 前言 本文适用于使用Git做VCS(版本控制系统)的场景. 用过Git的程序猿,都喜欢其分布式架构带来的commit快感.不用像使用SVN这种集中式版本管理系统,每一次提交 ...
- erlang的undefined macro 'MODULE',头一行编译通不过的问题
前言:对于erlang的编译有很多方式,rebar,makefile文件 还是对于单个文件的erlc编译等,但不管何种方式,一个模块的第一行就编译不过去,实在让人纠结... 1)问题上述: 在技术交流 ...
- IOS - unity3d错误Could not produce class with ID
运行环境 Unity 5.3.5f1 (IL2CPP)编译IOS版本 XCode Version 7.2.1 (7C1002) Mac OS X 10.11.3 (15D21) (Mac mini) ...
- Python中urllib2总结
使用Python访问网页主要有三种方式: urllib, urllib2, httpliburllib比较简单,功能相对也比较弱,httplib简单强大,但好像不支持session1. 最简单的页面访 ...
- iOS开发 两个内存错误的一般处理方法
本文转载至 http://blog.sina.com.cn/s/blog_a843a8850101dxlj.html 由于iOS5.0之前没有自动应用计数机制,也没有Java那样的垃圾回收功能.我们都 ...
- 申请edu邮箱
https://blog.csdn.net/w305607610/article/details/86771593 手把手教你申请CCC(City Colleges of Chicago)教育邮箱 台 ...
- 【BZOJ4569】[Scoi2016]萌萌哒 倍增+并查集
[BZOJ4569][Scoi2016]萌萌哒 Description 一个长度为n的大数,用S1S2S3...Sn表示,其中Si表示数的第i位,S1是数的最高位,告诉你一些限制条件,每个条件表示为四 ...
- EasyRTMP+EasyDSS实现一套完整的紧急视频回传直播与存储回放方案
需求来源 紧急视频回传云端:即拍即传.云端存储.紧急录像.云拍云录!这些需求现在可能对于我们来说比较远,大部分也是在行业中才会用到,但相信在不就的将来肯定会落地到每个人的手中,因为这是一个自我保护.自 ...
- 高复用率的RTSPClient组件EasyRTSPClient调用说明
EasyRTSPClient 调用说明 概述 EasyRtspClient是EasyDarwin家族中针对RTSP协议的拉流组件 EasyRtspClient视频支持H264.H265.MJPEG格式 ...
- wait() 区别 sleep()
wait() notify() notifyAll() wait和notify方法必须写在synchronized方法内,即在调用wait和notify方法前,需先获得对象锁: 调用wait方法则释放 ...