[
https://issues.apache.org/jira/browse/THRIFT-5337?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Yuxuan Wang resolved THRIFT-5337.
---------------------------------
Resolution: Fixed
> Go set fields write improvement
> -------------------------------
>
> Key: THRIFT-5337
> URL: https://issues.apache.org/jira/browse/THRIFT-5337
> Project: Thrift
> Issue Type: Improvement
> Components: Go - Compiler
> Reporter: BytedanceRPC
> Priority: Major
> Fix For: 0.14.0
>
> Time Spent: 8h
> Remaining Estimate: 0h
>
> There is a duplicate elements check for set in `writeFields*` function, and
> it compares elements using `reflect.DeepEqual` which is expensive.
> It's much faster that generates a "DeepEqual" function for set elements and
> apply it in duplicate elements check, especially for nested struct element.
> For example, a thrift file like this:
>
> {code:java}
> namespace go bytedance.thrift.example
> struct Simple {
> 1: set<double> DoubleSet
> }
> struct Base {
> 1: set<i64> I64Set
> }
> struct WrappedBase {
> 1: set<Base> BaseSet
> }
> struct Nested {
> 1: set<WrappedBase> WrappedBaseSet
> }
> {code}
>
> Go generator would generate `Equals` method for structs defined in thrift
> file.
> generated file diff:
> https://gist.github.com/BytedanceRPC/1aa34b65cf4c9efabed0d0a115262d85
>
>
> Benchmark writeField1 for Simple and Nested:
> {code:java}
> name old time/op new time/op delta
> SimpleWriteField1-8 576ns ± 3% 435ns ± 3% -24.56% (p=0.000 n=10+10)
> NestedWriteField1-8 257µs ± 3% 3µs ± 5% -98.71% (p=0.000
> n=10+10)name old alloc/op new alloc/op delta
> SimpleWriteField1-8 160B ± 0% 153B ± 0% -4.58% (p=0.000 n=8+9)
> NestedWriteField1-8 45.5kB ± 0% 0.4kB ± 1% -99.23% (p=0.000
> n=9+10)name old allocs/op new allocs/op delta
> SimpleWriteField1-8 6.00 ± 0% 4.00 ± 0% -33.33% (p=0.000 n=10+10)
> NestedWriteField1-8 2.22k ± 0% 0.01k ± 0% -99.68% (p=0.000 n=10+10)
> {code}
>
>
--
This message was sent by Atlassian Jira
(v8.3.4#803005)