pool.go 1022 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package pool
  2. import (
  3. "sync"
  4. )
  5. const PoolSize = 64 * 1024
  6. const PoolSizeSmall = 100
  7. const PoolSizeUdp = 1472
  8. const PoolSizeCopy = 32 << 10
  9. var BufPool = sync.Pool{
  10. New: func() interface{} {
  11. return make([]byte, PoolSize)
  12. },
  13. }
  14. var BufPoolUdp = sync.Pool{
  15. New: func() interface{} {
  16. return make([]byte, PoolSizeUdp)
  17. },
  18. }
  19. var BufPoolMax = sync.Pool{
  20. New: func() interface{} {
  21. return make([]byte, PoolSize)
  22. },
  23. }
  24. var BufPoolSmall = sync.Pool{
  25. New: func() interface{} {
  26. return make([]byte, PoolSizeSmall)
  27. },
  28. }
  29. var BufPoolCopy = sync.Pool{
  30. New: func() interface{} {
  31. buf := make([]byte, PoolSizeCopy)
  32. return &buf
  33. },
  34. }
  35. func PutBufPoolUdp(buf []byte) {
  36. if cap(buf) == PoolSizeUdp {
  37. BufPoolUdp.Put(buf[:PoolSizeUdp])
  38. }
  39. }
  40. func PutBufPoolCopy(buf []byte) {
  41. if cap(buf) == PoolSizeCopy {
  42. BufPoolCopy.Put(&buf)
  43. }
  44. }
  45. func GetBufPoolCopy() []byte {
  46. return (*BufPoolCopy.Get().(*[]byte))[:PoolSizeCopy]
  47. }
  48. func PutBufPoolMax(buf []byte) {
  49. if cap(buf) == PoolSize {
  50. BufPoolMax.Put(buf[:PoolSize])
  51. }
  52. }