举例来说:
func internall(a string) int {
someMap := map[string]int {
"1" : 1,
...
"1000000" : 1000000,
}
return someMap[a]
}
字符串
或
var someMap = map[string]int {
"1" : 1,
...
"1000000" : 1000000,
}
func externall(a string) int {
return someMap[a]
}
型
问:如果这个函数经常被调用并且是多线程的,会对优化有影响吗?如果一个变量在函数内部声明,这会导致Map被多次创建吗?
1条答案
按热度按时间w1e3prcc1#
一般来说,如果map很大或者函数被频繁调用,那么将MAP声明为
global variable (outside the function)
而不是在函数中声明会更有效。为什么
当MAP声明为
inside the function (in internal1) as a local variable
时,每次调用函数时都会创建并初始化它。这可能会导致内存和处理时间方面的开销。这是一个问题。全局变量的另一种方式:
当MAP被声明为全局变量时,它只会在程序启动时被创建和初始化一次。这意味着所有线程共享同一个示例。但是要小心同步和竞争条件。Go标准库中的
sync.Map
可以用于多线程。