WatchService questions
Alan Bateman
Alan.Bateman at Sun.COM
Sun Dec 6 09:44:27 PST 2009
John Hendrikx wrote:
> :
>
> What I hadn't realized is that after you receive an OVERFLOW that the
> subsequent events will form a cohesive stream of events again which
> can be used to update a directory after re-reading it. It does make
> sense to me though to "scan" for the overflow so to speak -- either
> that or I would probably expect an implementation of WatchService to
> clear all pending events before adding the OVERFLOW. Not only are the
> pending events useless if an overflow occurs, but clearing them would
> make room for subsequent events again (if not, you'd be in a permanent
> state of overflow...?)
This is a good point as the watch service could drop all pending events
when the limit is reached. Furthermore it can drop all subsequent events
while the head is an OVERFLOW event. I'll create a bug to track this -
thanks!
> My original assessment was wrong. The Swing Event thread was not
> starved for CPU, but instead was busy handling the WatchService events
> in the invokeAndWait part. This made it seem that the Event thread
> was starved for CPU (as other parts of the UI weren't updating
> anymore) while it really was consuming the CPU all by itself.
>
> In effect, in the time it took me to handle 60 WatchService events,
> 513 (512 + Overflow?) more had accumulated, resulting in second long
> delays for the UI to become responsive again.
Thanks for the update. I did a quick test that watches a directory and
retrieves all events in a timely manner. Another program creates and
deletes 10000 files in the watched directory which I think is what you
are doing. The test was on Windows (as I think this is where your UI is
at, right?). As expected the watcher didn't consume too many CPU cycles
and is barely noticeable. Also, the list of events typically only
contain a single event as it can easily keep up with programs creating
lots of files (which is a very slow in comparison). I changed the test
to sleep periodically, thus delaying the retrieval of events. In that
case, 512 events are queued very quickly, and subsequent events are
dropped. Again, the CPU usage is barely noticeable so this concurs with
your observation that the time is spent on processing the events.
Anyway, let us know how your solution goes - your war story may be
useful to others.
-Alan.
More information about the nio-dev
mailing list