Sascha,

Please accept my sincerest aopologies. I'm afriad my American
ignorance of other cultures is more than just a little obvious at
times.

I believe I have made the same mistake with Jan. :]

Please be patient with me as I learn the details of cultures across
the Pacific and Atalantic Oceans!

The Sunburned Surveyor

On 5/24/07, Sascha L. Teichmann <[EMAIL PROTECTED]> wrote:
> TNX, but for the records 'he' would be more suited in my case.
>
> 'Sascha' is basically a Russian term of endearment for the
> boys name 'Alexander' but it's also used as a girls name.
>
> BTW: 'Jan' is a girls name in the US too, isn't? ;-)
>
> - Sascha
>
>
> Sunburned Surveyor schrieb:
> > Sascha and Larry,
> >
> > I must admit that I am way over my head here. I haven't done much
> > thread programming in Java. (Hopefully Stefan has!)
> >
> > Sascha wrote: "My primary goal is to simplify the
> > threading code to make it more reliable in terms of time."
> >
> > This seems like an admirable goal to me. If Larry, or a similar
> > programmer of his experience, agrees that this changes would be
> > beneficial, I say we give Sascha a shot at it. It sounds like she has
> > considered her changes carefully.
> >
> > Just my two cents.
> >
> > The Sunburned Surveyor
> >
> >
> >
> > On 5/24/07, Sascha L. Teichmann <[EMAIL PROTECTED]> wrote:
> >> Hi Larry,
> >>
> >> short answer first: No, I don't have any benchmarks, yet.
> >>
> >> The long answer: My primary goal is to simplify the
> >> threading code to make it more reliable in terms of time.
> >> Gaining performance improvements would be a neat side effect.
> >>
> >> Background: Multi-threading may be fine for slow layers
> >> which arrives later on the screen but for exporting
> >> the data (to print/layout e.g) it would be nice to have
> >> them arriving one after the other.
> >>
> >> My final goal is to have a simple switch between the normal
> >> and the serial mode. To archive that I try to carefully
> >> refactor the system doing little patches step by step
> >> not to break it. Refactoring the ThreadQueue with it's
> >> 'flaws' seems a to be a good starting point to me.
> >>
> >> One reason for this change is the fact that you are able
> >> to figure out if the default thread runs empty. But there
> >> is no way to figure out when the last thread ends. That
> >> are different things. A mechanism for this is planned.
> >>
> >> Sorry, if I've shadowed my true intentions to much. Maybe
> >> I should discuss more before I send patches.  ;-)
> >>
> >> Back to the technical side:
> >>
> >> The patch needs some testing but I don't expect too much
> >> performance improvement.
> >>
> >> A less intrusive alternative to bind the Runnables that go to the
> >> default ThreadQueue into one thread is to create a container
> >> which self is Runnable (see e.g. RunnableArrayList attached)
> >> and put them into an instance of this class.
> >> This container is put into multiRendererThreadQueue as a Runnable.
> >> With this modification the defaultRendererThreadQueue can
> >> be removed (multiRendererThreadQueue renamed to
> >> defaultRendererThreadQueue). Only an idea ... I'm in discussion
> >> mode now. ;-)
> >>
> >> - Sascha
> >>
> >>
> >> Larry Becker schrieb:
> >>> Hi Sascha,
> >>>
> >>>   I read your comments and look at your code with interest.  It appears
> >>> to be an improved ThreadQueue implementation, but will require a lot of
> >>> testing to verify.  Before I invest this time, I would like to know what
> >>> problem it is solving.  I see your dislikes a - e, but these are not
> >>> really problems, only architectural critiques.  Have you done any
> >>> benchmarks that show that the new SingleThreadQueue speeds up
> >>> rendering?  Your logical argument that it should be more efficient  is
> >>> persuasive,  but  I have been surprised by Java before.
> >>>
> >>> respectfully,
> >>> Larry Becker
> >>>
> >>> On 5/23/07, *Sascha L. Teichmann* <[EMAIL PROTECTED]
> >>> <mailto:[EMAIL PROTECTED]>> wrote:
> >>>
> >>>     Hi together,
> >>>
> >>>     as some of you may already know i have my dislikes against
> >>>     ThreadQueue [1] (Hi, Larry!) see my mail [2]
> >>>
> >>>     a - It forks a new thread for any Runnable it processes.
> >>>     b - It has an ugly busy wait loop inside.
> >>>     c - The event listener for empty queue fires to often.
> >>>     d - The default ThreadQueue is some kind of thread serializer.
> >>>     e - The DB/WMS ThreadQueue has no public access.
> >>>
> >>>     Now I've written a sub class of ThreadQueue: SingleThreadQueue
> >>>     (see attachment). This one deals with the issues a, b and d.
> >>>     I also attached a patch against RenderingManager [3] to handle e.
> >>>
> >>>     The new class (to be placed in package
> >>>     com.vividsolutions.jump.workbench.ui.renderer) is a drop-in
> >>>     replacement for the default ThreadQueue in RenderingManager.
> >>>     Not for the ThreadQueue that handles the DB/WMS layers.
> >>>
> >>>     Because Jon limited the number of parallel threads in default
> >>>     queue to 1 I see no reason why to fork a new thread for each
> >>>     Runnable it processes. Thread creation/shutdown is fairly
> >>>     expensive. Instead a single background thread is started
> >>>     which processes the Runnables one by one. If the thread
> >>>     is idle for 30 secs it shuts itself down. If you have a lot
> >>>     of (non-WMS/BB) layers this should improve performance
> >>>     and save some resources. The processing itself is done
> >>>     with a monitor (synchronized/wait/notify) so there is no
> >>>     busy wait any more.
> >>>
> >>>     The DB/WMS ThreadQueue (real parallel threads) is left untouched
> >>>     for the moment. Depending on my personal schedule I will send
> >>>     a patch against this one too. Preliminary code with thread pooling
> >>>     exists but it needs a bit more testing.
> >>>
> >>>     Find attached the new class and patches against RenderingManager and
> >>>     the old ThreadQueue to bring it to work.
> >>>
> >>>     Comments are very welcome. :-)
> >>>
> >>>     Kind regrads,
> >>>       Sascha
> >>>
> >>>     [1] com.vividsolutions.jump.workbench.ui.renderer.ThreadQueue
> >>>     [2]
> >>>     
> >>> http://sourceforge.net/mailarchive/message.php?msg_name=4653389E.6000706%40intevation.de
> >>>     [3] com.vividsolutions.jump.workbench.ui.renderer.RenderingManager
> >>>
> >>>     Index:
> >>>     
> >>> ./src/com/vividsolutions/jump/workbench/ui/renderer/RenderingManager.java
> >>>
> >>>     ===================================================================
> >>>     RCS file:
> >>>     
> >>> /cvsroot/jump-pilot/openjump/src/com/vividsolutions/jump/workbench/ui/renderer/RenderingManager.java,v
> >>>     retrieving revision 1.6
> >>>     diff -u - r1.6 RenderingManager.java
> >>>     ---
> >>>     
> >>> ./src/com/vividsolutions/jump/workbench/ui/renderer/RenderingManager.java
> >>>     22 May 2007 18:47:12 -0000      1.6
> >>>     +++
> >>>     
> >>> ./src/com/vividsolutions/jump/workbench/ui/renderer/RenderingManager.java
> >>>     24 May 2007 04:10:30 -0000
> >>>     @@ -77,7 +77,7 @@
> >>>              * non-database layers in parallel. In fact, it will make
> >>>     the GUI less
> >>>              * responsive. [Jon Aquino]
> >>>              */
> >>>     -       private ThreadQueue defaultRendererThreadQueue = new
> >>>     ThreadQueue(1);
> >>>     +       private ThreadQueue defaultRendererThreadQueue = new
> >>>     SingleThreadQueue();
> >>>
> >>>             /**
> >>>              * WMS and database processing are done on the server side,
> >>>     so allow these
> >>>     @@ -294,6 +294,10 @@
> >>>                     return defaultRendererThreadQueue;
> >>>             }
> >>>
> >>>     +       public ThreadQueue getMultiRendererThreadQueue() {
> >>>     +               return multiRendererThreadQueue;
> >>>     +       }
> >>>     +
> >>>             public void dispose() {
> >>>                     repaintTimer.stop ();
> >>>                     defaultRendererThreadQueue.dispose();
> >>>     @@ -334,4 +338,4 @@
> >>>              contentIDToRendererMap.remove(contentID);
> >>>          }
> >>>
> >>>     -}
> >>>     \ No newline at end of file
> >>>     +}
> >>>
> >>>     Index:
> >>>     ./src/com/vividsolutions/jump/workbench/ui/renderer/ThreadQueue.java
> >>>     ===================================================================
> >>>     RCS file:
> >>>     
> >>> /cvsroot/jump-pilot/openjump/src/com/vividsolutions/jump/workbench/ui/renderer/ThreadQueue.java,v
> >>>     retrieving revision 1.1
> >>>     diff -u - r1.1 ThreadQueue.java
> >>>     ---
> >>>     ./src/com/vividsolutions/jump/workbench/ui/renderer/ThreadQueue.java  
> >>>       16
> >>>     Jun 2005 22:50:38 -0000      1.1
> >>>     +++
> >>>     ./src/com/vividsolutions/jump/workbench/ui/renderer/ThreadQueue.java  
> >>>       24
> >>>     May 2007 04:09:15 -0000
> >>>     @@ -47,6 +47,10 @@
> >>>          private Vector queuedRunnables = new Vector();
> >>>          private int maxRunningThreads;
> >>>
> >>>     +               public ThreadQueue() {
> >>>     +                       this(1);
> >>>     +               }
> >>>     +
> >>>          public ThreadQueue(final int maxRunningThreads) {
> >>>              this.maxRunningThreads = maxRunningThreads;
> >>>          }
> >>>     @@ -95,7 +99,7 @@
> >>>          public static interface Listener {
> >>>              public void allRunningThreadsFinished();
> >>>          }
> >>>     -    private void fireAllRunningThreadsFinished() {
> >>>     +    protected void fireAllRunningThreadsFinished() {
> >>>             //new ArrayList to avoid ConcurrentModificationException
> >>>     [Jon Aquino]
> >>>              for (Iterator i = new ArrayList(listeners).iterator();
> >>>     i.hasNext(); ) {
> >>>                  Listener listener = (Listener) i.next();
> >>>
> >>>     
> >>> -------------------------------------------------------------------------
> >>>     This SF.net email is sponsored by DB2 Express
> >>>     Download DB2 Express C - the FREE version of DB2 express and take
> >>>     control of your XML. No limits. Just data. Click to get it now.
> >>>     http://sourceforge.net/powerbar/db2/
> >>>     _______________________________________________
> >>>     Jump-pilot-devel mailing list
> >>>     Jump-pilot-devel@lists.sourceforge.net
> >>>     <mailto:Jump-pilot-devel@lists.sourceforge.net>
> >>>     https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel
> >>>     <https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>> --
> >>> http://amusingprogrammer.blogspot.com/
> >>>
> >>>
> >>> ------------------------------------------------------------------------
> >>>
> >>> -------------------------------------------------------------------------
> >>> This SF.net email is sponsored by DB2 Express
> >>> Download DB2 Express C - the FREE version of DB2 express and take
> >>> control of your XML. No limits. Just data. Click to get it now.
> >>> http://sourceforge.net/powerbar/db2/
> >>>
> >>>
> >>> ------------------------------------------------------------------------
> >>>
> >>> _______________________________________________
> >>> Jump-pilot-devel mailing list
> >>> Jump-pilot-devel@lists.sourceforge.net
> >>> https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel
> >> -------------------------------------------------------------------------
> >> This SF.net email is sponsored by DB2 Express
> >> Download DB2 Express C - the FREE version of DB2 express and take
> >> control of your XML. No limits. Just data. Click to get it now.
> >> http://sourceforge.net/powerbar/db2/
> >> _______________________________________________
> >> Jump-pilot-devel mailing list
> >> Jump-pilot-devel@lists.sourceforge.net
> >> https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel
> >>
> >>
> >>
> >
> > -------------------------------------------------------------------------
> > This SF.net email is sponsored by DB2 Express
> > Download DB2 Express C - the FREE version of DB2 express and take
> > control of your XML. No limits. Just data. Click to get it now.
> > http://sourceforge.net/powerbar/db2/
> > _______________________________________________
> > Jump-pilot-devel mailing list
> > Jump-pilot-devel@lists.sourceforge.net
> > https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel
>
> -------------------------------------------------------------------------
> This SF.net email is sponsored by DB2 Express
> Download DB2 Express C - the FREE version of DB2 express and take
> control of your XML. No limits. Just data. Click to get it now.
> http://sourceforge.net/powerbar/db2/
> _______________________________________________
> Jump-pilot-devel mailing list
> Jump-pilot-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel
>

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Jump-pilot-devel mailing list
Jump-pilot-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel

Reply via email to