Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
B
b
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
b
Commits
51af3381
Commit
51af3381
authored
Jul 16, 2016
by
Jan Mercl
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Document concurrency issues. Fixes #5.
parent
47184dd8
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
74 additions
and
44 deletions
+74
-44
Makefile
Makefile
+36
-30
all_test.go
all_test.go
+6
-2
doc.go
doc.go
+32
-12
No files found.
Makefile
View file @
51af3381
# Copyright 2014 The b Authors. All rights reserved.
# Use of this source code is governed by a BSD-style
# license that can be found in the LICENSE file.
.PHONY
:
all clean cover cpu editor internalError later mem nuke todo edit
.PHONY
:
all todo clean cover generic mem nuke cpu
testbin
=
b.test
grep
=
--include
=
*
.go
--include
=
*
.l
--include
=
*
.y
--include
=
*
.yy
ngrep
=
'TODOOK\|parser\.go\|scanner\.go\|.*_string\.go'
all
:
editor
go build
go vet
golint .
go
install
go vet 2>&1 |
grep
-v
$(ngrep)
||
true
golint 2>&1 |
grep
-v
$(ngrep)
||
true
make todo
editor
:
gofmt
-l
-s
-w
.
go
test
-i
go
test
-
unused .
-
misspell
*
.go
-
gosimple
clean
:
@
go clean
rm
-f
*
~
*
.
out
$(testbin)
go clean
rm
-f
*
~
*
.
test
*
.out
cover
:
t
=
$(
shell
tempfile
)
;
go
test
-coverprofile
$$
t
&&
go tool cover
-html
$$
t
&&
unlink
$$
t
cpu
:
go
test
-c
./
$(testbin)
-test
.cpuprofile cpu.out
go tool pprof
--lines
$(testbin)
cpu.out
cpu
:
clean
go
test
-run
@
-bench
.
-cpuprofile
cpu.out
go tool pprof
-lines
*
.test cpu.out
edit
:
@
1>/dev/null 2>/dev/null gvim
-p
Makefile
*
.go
editor
:
gofmt
-l
-s
-w
*
.go
go
test
go build
generic
:
@
# writes to stdout a version where the type of key is KEY and the type
...
...
@@ -38,16 +38,22 @@ generic:
@
# the output with your desired types.
@
sed
-e
's|interface{}[^{]*/\*K\*/|KEY|g'
-e
's|interface{}[^{]*/\*V\*/|VALUE|g'
btree.go
mem
:
go
test
-c
./
$(testbin)
-test
.bench
.
-test
.memprofile mem.out
-test
.memprofilerate 1
go tool pprof
--lines
--web
--alloc_space
$(testbin)
mem.out
internalError
:
egrep
-ho
'"internal error.*"'
*
.go |
sort
|
cat
-n
later
:
grep
-n
$(grep)
LATER
*
||
true
grep
-n
$(grep)
MAYBE
*
||
true
mem
:
clean
go
test
-run
@
-bench
.
-memprofile
mem.out
-memprofilerate
1
-timeout
24h
go tool pprof
-lines
-web
-alloc_space
*
.test mem.out
nuke
:
clean
rm
-f
*
.test
*
.out
go clean
-i
todo
:
@
grep
-n
^[[:space:]]
*
_[[:space:]]
*
=[[
:space:]][[:alpha:]][[:alnum:]]
*
*
.go
||
true
@
grep
-n
TODO
*
.go
||
true
@
grep
-n
BUG
*
.go
||
true
@
grep
-n
println
*
.go
||
true
grep
-nr
$(grep)
^[[:space:]]
*
_[[:space:]]
*
=[[
:space:]][[:alpha:]][[:alnum:]]
*
*
|
grep
-v
$(ngrep)
||
true
grep
-nr
$(grep)
TODO
*
|
grep
-v
$(ngrep)
||
true
grep
-nr
$(grep)
BUG
*
|
grep
-v
$(ngrep)
||
true
grep
-nr
$(grep)
[
^[:alpha:]]println
*
|
grep
-v
$(ngrep)
||
true
all_test.go
View file @
51af3381
...
...
@@ -36,13 +36,17 @@ func dbg(s string, va ...interface{}) {
fmt
.
Println
()
}
func
TODO
(
...
interface
{})
string
{
func
TODO
(
...
interface
{})
string
{
//TODOOK
_
,
fn
,
fl
,
_
:=
runtime
.
Caller
(
1
)
return
fmt
.
Sprintf
(
"TODO: %s:%d:
\n
"
,
path
.
Base
(
fn
),
fl
)
return
fmt
.
Sprintf
(
"TODO: %s:%d:
\n
"
,
path
.
Base
(
fn
),
fl
)
//TODOOK
}
func
use
(
...
interface
{})
{}
func
init
()
{
use
(
caller
,
dbg
,
TODO
,
isNil
,
(
*
Tree
)
.
dump
)
//TODOOK
}
// ============================================================================
func
isNil
(
p
interface
{})
bool
{
...
...
doc.go
View file @
51af3381
...
...
@@ -6,10 +6,30 @@
//
// Changelog
//
// 2016-07-16: Update becnhmark results to newer Go version. Add a note on
// concurrency.
//
// 2014-06-26: Lower GC presure by recycling things.
//
// 2014-04-18: Added new method Put.
//
// Concurrency considerations
//
// Tree.{Clear,Delete,Put,Set} mutate the tree. One can use eg. a
// sync.Mutex.Lock/Unlock (or sync.RWMutex.Lock/Unlock) to wrap those calls if
// they are to be invoked concurrently.
//
// Tree.{First,Get,Last,Len,Seek,SeekFirst,SekLast} read but do not mutate the
// tree. One can use eg. a sync.RWMutex.RLock/RUnlock to wrap those calls if
// they are to be invoked concurrently with any of the tree mutating methods.
//
// Enumerator.{Next,Prev} mutate the enumerator and read but not mutate the
// tree. One can use eg. a sync.RWMutex.RLock/RUnlock to wrap those calls if
// they are to be invoked concurrently with any of the tree mutating methods. A
// separate mutex for the enumerator, or the whole tree in a simplified
// variant, is necessary if the enumerator's Next/Prev methods per se are to
// be invoked concurrently.
//
// Generic types
//
// Keys and their associated values are interface{} typed, similar to all of
...
...
@@ -34,20 +54,20 @@
// No other changes to int.go are necessary, it compiles just fine.
//
// Running the benchmarks for 1000 keys on a machine with Intel i5-4670 CPU @
// 3.4GHz, Go
release 1.4.2
.
// 3.4GHz, Go
1.7rc1
.
//
// $ go test -bench 1e3 example/all_test.go example/int.go
// BenchmarkSetSeq1e3-4 20000 78265 ns/op
// BenchmarkGetSeq1e3-4 20000 67980 ns/op
// BenchmarkSetRnd1e3-4 10000 172720 ns/op
// BenchmarkGetRnd1e3-4 20000 89539 ns/op
// BenchmarkDelSeq1e3-4 20000 87863 ns/op
// BenchmarkDelRnd1e3-4 10000 130891 ns/op
// BenchmarkSeekSeq1e3-4 10000 100118 ns/op
// BenchmarkSeekRnd1e3-4 10000 121684 ns/op
// BenchmarkNext1e3-4 200000 6330 ns/op
// BenchmarkPrev1e3-4 200000 9066 ns/op
// PASS
// BenchmarkSetSeq1e3 10000 151620 ns/op
// BenchmarkGetSeq1e3 10000 115354 ns/op
// BenchmarkSetRnd1e3 5000 255865 ns/op
// BenchmarkGetRnd1e3 10000 140466 ns/op
// BenchmarkDelSeq1e3 10000 143860 ns/op
// BenchmarkDelRnd1e3 10000 188228 ns/op
// BenchmarkSeekSeq1e3 10000 156448 ns/op
// BenchmarkSeekRnd1e3 10000 190587 ns/op
// BenchmarkNext1e3 200000 9407 ns/op
// BenchmarkPrev1e3 200000 9306 ns/op
// ok command-line-arguments 26.369s
// ok command-line-arguments 42.531s
// $
package
b
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment