So before wrapping these optimizations up I decided to take a last
look at the thread graph in jvisualvm and it showed that the worker
threads spend more time in park state then in running. But the graph
was really not showing why, it was more like a noodle soup. So I
brought one of my past optimization back in: to always read file in
big blocks (don't start analyze/check on each paragraph break), this
made the thread graph very clear: besides waiting for main thread to
prepare sentences the check threads run times were not equal (we had
equal amount of rules per thread which does not actually amount to the
same load). So I've added another of my test optimizations which
didn't help before: creating a callable for each rule rather than for
group of rules.
The result: my cpu idle state went from 40% to 10% (now pretty much
all of those 10% is in main thread, we could optimize it too but will
have to refactor our workflow a bit). The speed went up from ~2500
(~1900 originally before previous optimizations) to ~2700 sentences/s.
With this change adding more threads than cpus don't help (actually
decreases performance) so we could probably get rid of the new
internal property.

Just to note: there's slight change in output: as we don't split the
check on each paragraph change in the output some sentences with
errors will have the beginning of the next sentence (beyond paragraph
break). Hopefully it's not a big deal.

I will need to work on cleaning thigs up, add changes for
SameRuleGroupFilter and then will create another branch for everybody
to test it out.

Andriy

2015-02-20 8:10 GMT-05:00 Daniel Naber <daniel.na...@languagetool.org>:
> On 2015-02-19 22:16, Andriy Rysin wrote:
>
>> I've merged multithreading branch into master. Please try it out when
>> you have a chance and let me know if you see any issues.
>
> Thanks. Some small cleanup ideas:
>
> -setThreadPoolSize should probably be a parameter of the constructor, as
> calling it after thread pool setup would fail anyway ("Thread pool
> already initialized")
> -Does newFixedThreadPool need to use lazy init? If it gets initialized
> in the constructor, it can also be made final.
> -It can be 'threadPool' I think, no need for the 'new' and 'fixed' in
> the variable name.
>
> Regards
>   Daniel
>
>
> ------------------------------------------------------------------------------
> Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server
> from Actuate! Instantly Supercharge Your Business Reports and Dashboards
> with Interactivity, Sharing, Native Excel Exports, App Integration & more
> Get technology previously reserved for billion-dollar corporations, FREE
> http://pubads.g.doubleclick.net/gampad/clk?id=190641631&iu=/4140/ostg.clktrk
> _______________________________________________
> Languagetool-devel mailing list
> Languagetool-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/languagetool-devel

------------------------------------------------------------------------------
Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server
from Actuate! Instantly Supercharge Your Business Reports and Dashboards
with Interactivity, Sharing, Native Excel Exports, App Integration & more
Get technology previously reserved for billion-dollar corporations, FREE
http://pubads.g.doubleclick.net/gampad/clk?id=190641631&iu=/4140/ostg.clktrk
_______________________________________________
Languagetool-devel mailing list
Languagetool-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/languagetool-devel

Reply via email to