File tree 1 file changed +9
-26
lines changed
1 file changed +9
-26
lines changed Original file line number Diff line number Diff line change 63
63
MapUseThreshold = 16
64
64
DisableBeautifulErrors = false // set to "true" for best performance, if you have many decode errors
65
65
66
- decoderPool = make ([]* decoder , 0 , 16 )
67
- decoderPoolIndex = - 1
68
- decoderPoolMu = & sync.Mutex {}
66
+ decoderPool = sync.Pool {
67
+ New : func () interface {} {
68
+ decoder := & decoder {}
69
+ decoder .initPool ()
70
+ return decoder
71
+ },
72
+ }
69
73
70
74
numbersMap = make ([]byte , 256 )
71
75
@@ -144,7 +148,6 @@ type StrictNode struct {
144
148
}
145
149
146
150
type decoder struct {
147
- id int
148
151
buf []byte
149
152
root Root
150
153
nodePool []* Node
@@ -1819,31 +1822,11 @@ func (d *decoder) expandPool() []*Node {
1819
1822
}
1820
1823
1821
1824
func getFromPool () * decoder {
1822
- decoderPoolMu .Lock ()
1823
- defer decoderPoolMu .Unlock ()
1824
-
1825
- decoderPoolIndex ++
1826
- if decoderPoolIndex >= len (decoderPool ) {
1827
- decoder := & decoder {id : decoderPoolIndex }
1828
- decoder .initPool ()
1829
- decoder .id = decoderPoolIndex
1830
- decoderPool = append (decoderPool , decoder )
1831
- }
1832
-
1833
- return decoderPool [decoderPoolIndex ]
1825
+ return decoderPool .Get ().(* decoder )
1834
1826
}
1835
1827
1836
1828
func backToPool (d * decoder ) {
1837
- decoderPoolMu .Lock ()
1838
- defer decoderPoolMu .Unlock ()
1839
-
1840
- decoderPool [d .id ] = decoderPool [decoderPoolIndex ]
1841
- decoderPool [d .id ].id = d .id
1842
-
1843
- d .id = decoderPoolIndex
1844
- decoderPool [decoderPoolIndex ] = d
1845
-
1846
- decoderPoolIndex --
1829
+ decoderPool .Put (d )
1847
1830
}
1848
1831
1849
1832
func Spawn () * Root {
You can’t perform that action at this time.
0 commit comments