Skip to content

perf(go): get a specific messager by codegen without accessing MessagerMap and Type Assertion #77

@wenchy

Description

@wenchy

Problem

Cost of hub.GetHub().GetXXXConf() includes two parts:

  • Access a Messager from map:MessagerMap
  • Type Assertion

We want to avoid the cost to speed-up messager accessing.

// Auto-generated getters below
func (h *Hub) GetHeroConf() *HeroConf {
msger := h.GetMessager("HeroConf")
if msger != nil {
if conf, ok := msger.(*HeroConf); ok {
return conf
}
}
return nil
}

Solution

// messagerContainer holds all messagers as named fields in struct for fast access.
type messagerContainer struct {
	MessagerMap MessagerMap
	LoadedTime  time.Time
	// all messagers as fields for fast access
	HeroConf           *HeroConf
	...
}

// Hub is the messager manager.
type Hub struct {
	messagerContainer atomic.Pointer[MessagerContainer]
	opts              *Options
}

 func (h *Hub) GetHeroConf() *HeroConf { 
 	return h.messagerContainer.Load().HeroConf
 } 

NOTE:

  • How to process custom messagers? just access custom messager from MessagerMap as before.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions