Skip to content

Gnet v2.3.0

Compare
Choose a tag to compare
@github-actions github-actions released this 01 Jul 14:14
· 61 commits to refs/heads/master since this release
59a3c61

🚀 Features

  • feat: implement gnet on Windows (#461)

🛩 Enhancements

  • build: add NetBSD and OpenBSD supports 9790927
  • opt: make use of the inheritance of file status flags on BSD-like OS d98706e
  • opt: rearrange the matrix and map of connections e308399
  • internal/math: fix a corner case for IsPowerOfTwo (#476)
  • opt: improve comments on Conn and test cases (#471)
  • opt: mitigate big map issue of connections when garbage collecting (#460)
  • opt: use the std math/bits routine to count the bit length (#437)
  • opt: refine the SockaddrToTCPOrUnixAddr and SockaddrToUDPAddr abcc031
  • opt: prepend [gnet] prefix to every log entry 650f731
  • opt: set up the PanicHandler and Logger for pkg/pool/goroutine 222a395

🐛 Bugfixes

  • bug: fix the data race among asynchronous methods daffb4e
  • bug: fix the data race in test on Windows (#472)
  • bug: replace the global logger with custom logger for client on Windows dd46b08
  • bug: invoke the callback whether the connection is open or not (#466)
  • bug: clean up the inner buffer after read event (#445)
  • bug: fix the nil panic in conn.Flush() and increase the code coverage 0f41b37
  • bug: fix the memory leak of linked-list-buffer 4b6dfdc
  • bug: fix the compile error on FreeBSD with 32-bit 72b6e72
  • bug & feat: replace the global default logger with custom logger 3c66bce

📚 Documentation

  • chore: update the info of techempower.com b341103
  • doc: update the minimum required version of Go a9c2638
  • doc: update READMEs about supported platforms 88ed242

🧳 Misc

  • chore: delete the unused code in pkg/buffer/ring bdbb661
  • chore: code cleanup 9ff529b
  • opt: rename eventloop.closeConn to eventloop.close 7c9a61a
  • chore: add test for Engine.CountConnections b493107
  • chore: print a debugging log about logging level when client starts bdda3bf
  • chore: update copyright info ebc191e
  • chore: bump ants to v2.7.3 edb9318
  • chore: fix the lint issues edffef8
  • chore: add more test cases for custom protocol testing deea03f

❇️ Notices

The two major updates in this release candidate are #460 and #461.

We introduced a new data structure matrix in #460 to displace the default map for managing connections internally, with the help of this new data structure, we can eliminate the pointers in map and store connections in the form of a matrix (an array of slices), which will significantly reduce GC (Garbage Collection) latency:

goos: darwin
goarch: arm64
pkg: github.com/panjf2000/gnet/v2
                                    │     old      │                 new                  │
                                    │    sec/op    │    sec/op     vs base                │
GC4El100k/Run-4-eventloop-100000-10    30.74m ± 3%   19.68m ± 10%  -35.98% (p=0.000 n=10)
GC4El200k/Run-4-eventloop-200000-10    63.64m ± 3%   38.16m ± 11%  -40.04% (p=0.000 n=10)
GC4El500k/Run-4-eventloop-500000-10   177.28m ± 8%   95.21m ±  4%  -46.29% (p=0.000 n=10)
geomean                                70.26m        41.51m        -40.92%

                                    │     old     │                new                 │
                                    │    B/op     │    B/op      vs base               │
GC4El100k/Run-4-eventloop-100000-10   27.50 ± 35%   25.50 ± 33%       ~ (p=0.423 n=10)
GC4El200k/Run-4-eventloop-200000-10   27.50 ± 53%   20.50 ± 66%       ~ (p=0.642 n=10)
GC4El500k/Run-4-eventloop-500000-10   16.00 ±   ?   18.00 ±   ?       ~ (p=0.357 n=10)
geomean                               22.96         21.11        -8.04%

                                    │     old      │                 new                 │
                                    │  allocs/op   │ allocs/op   vs base                 │
GC4El100k/Run-4-eventloop-100000-10   0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=10) ¹
GC4El200k/Run-4-eventloop-200000-10   0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=10) ¹
GC4El500k/Run-4-eventloop-500000-10   0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=10) ¹
geomean                                          ²               +0.00%                ²
¹ all samples are equal
² summaries must be >0 to compute geomean

The more connections there are, the more pronounced the effect.

While we have performed sufficient testing on matrix, we are still using map as the default connection storage in this RC version for the sake of caution, but you can enable the new data structure by specifying build tags: -tags=gc_opt. This can be considered as a precautionary measure so that in case matrix has any unexpected bugs, you can quickly fall back to the default map. We will consider promoting matrix to be the default storage for connections in a subsequent official release.

Another significant leap is #461, you can now run gnet on Windows, it should be noted that the Windows version of gnet is intended for development purposes and is not recommended for use in production.

Full Changelog: v2.2.0...v2.3.0

Thanks to all these contributors: @0-haha, @GXKe, @gocurr, @jinxing3114 and @panjf2000 for making this release possible.