Does not this trivial strategy work for us? https://wiki.c2.com/?OptimizeLater

2021-09-08 13:52 GMT+03:00, Andrey Gura <ag...@apache.org>:
> Agree that any additional object creation on a hot path could be a
> problem. So hot path should not contain stream API and any other
> potentially problem code (e.g. iterator instead of for by index).
>
> On Wed, Sep 8, 2021 at 1:45 PM Pavel Tupitsyn <ptupit...@apache.org> wrote:
>>
>> Ok, maybe a total ban is overkill, but right now streams are used even on
>> some hot paths like getAllAsync [1].
>>
>> Another issue is that Collectors.toList() and other variants don't accept
>> capacity, and we end up with unnecessary reallocations of underlying
>> arrays.
>>
>> [1]
>> https://github.com/apache/ignite-3/blob/1d7d703ff2b18234b15a9a7b03104fbb73388edf/modules/table/src/main/java/org/apache/ignite/internal/table/KVBinaryViewImpl.java#L83
>>
>> On Wed, Sep 8, 2021 at 1:06 PM Konstantin Orlov <kor...@gridgain.com>
>> wrote:
>>
>> > Hi!
>> >
>> > Agree with Ivan that it’s an overkill. Code readability and
>> > maintainability should have
>> > the same priority as the performance (with some exceptions of course).
>> >
>> > BTW the result of your benchmark looks quite strange. The performance
>> > penalty on
>> > my laptop (Core i7 9750H, 6 cores up to 4.50 GHz) is 25%, not 8 times:
>> >
>> > Benchmark                         Mode  Cnt      Score     Error
>> > Units
>> > JmhIncrementBenchmark.loopSum    thrpt   10  32347.819 ± 676.548
>> > ops/ms
>> > JmhIncrementBenchmark.streamSum  thrpt   10  24459.196 ± 610.152
>> > ops/ms
>> >
>> >
>> > --
>> > Regards,
>> > Konstantin Orlov
>> >
>> >
>> > > On 8 Sep 2021, at 12:23, Ivan Bessonov <bessonov...@gmail.com> wrote:
>> > >
>> > > Hello Igniters,
>> > >
>> > > I object, banning streams is an overkill. I would argue that most of
>> > > the
>> > > code
>> > > is not on hot paths and that allocations in TLAB don't create much
>> > pressure
>> > > on GC.
>> > >
>> > > Streams must be used cautiously, developers should know whether they
>> > > write hot methods or not. And if methods are not hot, code simplicity
>> > must
>> > > be
>> > > the first priority. I don't want Ignite 3 code to look like Ignite 2
>> > code,
>> > > where
>> > > people would iterate over Lists using explicit access by indexes,
>> > because it
>> > > saves them a single Iterator allocation. That's absurd.
>> > >
>> > > ср, 8 сент. 2021 г. в 11:43, Pavel Tupitsyn <ptupit...@apache.org>:
>> > >
>> > >> Igniters,
>> > >>
>> > >> Java streams are known to be slower and cause more GC pressure than
>> > >> an
>> > >> equivalent loop.
>> > >> Below is a simple filter/map/reduce scenario (code [1]):
>> > >>
>> > >> * Benchmark                                                     Mode
>> > Cnt
>> > >>    Score     Error   Units
>> > >>
>> > >> * StreamVsLoopBenchmark.loopSum
>> > >> thrpt
>> >   3
>> > >> 7987.016 ± 293.013  ops/ms
>> > >> * StreamVsLoopBenchmark.loopSum:·gc.alloc.rate
>> > >> thrpt
>> >   3
>> > >>   ≈ 10⁻⁴            MB/sec
>> > >> * StreamVsLoopBenchmark.loopSum:·gc.count
>> > >> thrpt
>> >   3
>> > >>      ≈ 0            counts
>> > >>
>> > >> * StreamVsLoopBenchmark.streamSum
>> > >> thrpt
>> >   3
>> > >> 1060.244 ±  36.485  ops/ms
>> > >> * StreamVsLoopBenchmark.streamSum:·gc.alloc.rate
>> > >> thrpt
>> >   3
>> > >>  315.819 ±  10.844  MB/sec
>> > >> * StreamVsLoopBenchmark.streamSum:·gc.count
>> > >> thrpt
>> >   3
>> > >>   55.000            counts
>> > >>
>> > >> Loop is several times faster and does not allocate at all.
>> > >>
>> > >> 1. Performance is one of the most important features of our product.
>> > >> 2. Most of our APIs will be on the hot path.
>> > >>
>> > >> One can argue about performance differences in real-world scenarios,
>> > >> but increasing GC pressure just to make the code a little bit nicer
>> > >> is
>> > >> unacceptable.
>> > >>
>> > >> I propose to ban streams usage in the codebase (except for the
>> > >> tests).
>> > >>
>> > >> Thoughts, objections?
>> > >>
>> > >> [1]
>> > >> https://gist.github.com/ptupitsyn/5934bbbf8f92ac4937e534af9386da97
>> > >>
>> > >
>> > >
>> > > --
>> > > Sincerely yours,
>> > > Ivan Bessonov
>> >
>> >
>


-- 

Best regards,
Ivan Pavlukhin

Reply via email to