On 04/25/2016 07:00 PM, Sergey Prigogin
wrote:
There is also a philosophical question on how
properly report progress of work done in parallel. The orthodox
approach is to just measure the amount of work completed so far
relative to the total. This is the same approach that is used in
the sequential case.
This is the approach I have in mind.
An alternative is a long-pole approach. Consider a
use case where the work is consists of two chunks of unequal
size given to two worker threads. The total time to completion
is determined by the larger chunk and therefore the progress
related to the smaller chunk is irrelevant and should not be
reported at all. This can be achieved by writing a custom
progress monitor that contains a collection of progress
monitors, one for each thread, and reports the lowest of
progress values across all child monitors.
In this case, how are we sure the longer thread will complete before
the other one, so that it would be the only one to report? Somehow,
it seems to me that reporting progress and reporting time to
completion are different things when working in parallel, and that
only the first one (progress) can easily be reported reliably, like
you described in the 1st part of your answer.
Reporting work done may not be perfect, but it would already be
quite good IMO.
|