这种优化有名称吗?
Posted
技术标签:
【中文标题】这种优化有名称吗?【英文标题】:Is there a name for this type of optimization? 【发布时间】:2015-10-17 18:30:34 【问题描述】:我在大型代码库上工作,并且在进行分析时,大部分时间都花在了锁争用和在地图中进行查找上。该系统是一个实时系统,由来自传入数据流的回调驱动。许多线程得到回调。 (许多消费者)。
通常使用字符串(键)调用回调函数,然后从回调中调用许多函数。这些函数本身调用了许多函数。
其中许多函数或这些函数的子函数都会进行查找,通常每次都查找相同的字符串。 (最初传递给回调的字符串)。
明显的优化是进行一次查找,然后将找到的内容作为参数传递给调用链。但问题是这将涉及更改大量代码和函数签名。
因此一种解决方案是在回调函数中将查找值保存在全局结构映射 threadid 到查找值。 Threadid 是一个 int 且线程数小于 100,因此查找线程 id 比查找字符串更快。
这种技术有名字吗?它就像一个在调用链顶部被清除的线程缓存。
【问题讨论】:
我不知道您对设计更改有多开放,但同样更快的解决方案是使用thread-local variables 用关键字thread_local
声明。那么你根本不需要发明并发数据结构。
我会对此进行调查。谢谢你。我可以进行一些设计更改,但我大部分时间都在推动我开发新功能。
线程局部变量(如果可用)比您建议的解决方案需要更少 的设计更改。它们更快,因为它们被认为是针对以线程 ID 为键的数据的特定情况,因此对它们有特殊的编译器、链接器和处理器支持。它们使用起来更简单,因为您不需要编写代码然后访问自制数据结构根本(因此与它相关的所有代码都消失了):相反,您可以简单地直接读取并分配给变量,就好像它是一个全局变量一样,只是每个线程都有自己的副本。原型示例是errno
。
我调查了本地线程并同意这是要走的路。
【参考方案1】:
我想你在想memoization。来自***:
在计算中,记忆是一种优化技术,主要用于通过存储昂贵的函数调用的结果并在再次出现相同的输入时返回缓存的结果来加速计算机程序。
【讨论】:
以上是关于这种优化有名称吗?的主要内容,如果未能解决你的问题,请参考以下文章
请问大佬有CCleaner(电脑系统优化工具) V5.82.8950 中文版软件免费百度云资源吗