使用protobuf(谷歌的PROTOcol BUFfer),我需要"转到"一个逻辑来处理收到的相应类型的消息。应该有很多类型的消息,关于这一点,我提出了两种方法" goto":
by function子句,其中guard与message_type匹配;
使用message_type作为密钥设置ETS,然后应用(Module,Fun)Module和Fun存储在ETS中。
现在我怀疑#1是O(n),因为涉及复杂的警卫,而毫无疑问地查找ETS O(1)。
你说什么?
答案 0 :(得分:0)
是什么让你认为apply
不会有O(n)效率?每次实施的成本是多少?
首先,在您的情况下,n
或多或少是不变的(函数或案例的数量)。因此,您不应该比较大O符号,而是比较给定n
的实际成本。
最明显的是O(1),它基本上表明你的成本并没有随着问题的大小而增长;但它并没有说你没有任何常规,或者你的成本很低。尽管如此,你可能会使用比O(n)形式n小于1000的资源更多的资源。
最后你要看的是实际数据。尝试对两种解决方案进行基准测试,看看哪种解决方案更快或者甚至更好,使用简单的,并在性能下降后开始担心。只是不要尝试解决不必修复的问题。
就个人而言,我会声明函数子句会更快。使用ETS,您可能会遇到多个进程之间并发读取的问题(即使启用了脏读取)。
答案 1 :(得分:0)
这听起来像过早优化。在您分析代码之后,绝对应该优化。我强烈建议您支持代码维护而不是优化,直到代码被认为太慢,我个人会因此选择 function clauses 。
尽管如此,您可能会喜欢效率指南,尤其是chapter on function clauses。在许多情况下,它们都是由编译器优化的。