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