[Zope] Threading, dtml and performance?!

kapil thangavelu k_vertigo@yahoo.com
Mon, 22 Oct 2001 19:19:11 -0700

On Monday 22 October 2001 07:20 am, Oliver Erlewein wrote:
> Hi everybody
> Try this from the root Folder:
> <dtml-var standard_html_header>
> <dtml-in
> "[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
>]"> <dtml-in "ZopeFind(this(), '', '', '', '', '' , '', '', '', 1)"
> sort=bobobase_modification_time reverse>
>   <dtml-var bobobase_modification_time>, <dtml-var id><br>
>  </dtml-in>
> </dtml-in>
> <dtml-var standard_html_footer>
> This should take a while to show. If not try more 1,1,1,....! If I call
> another page on a second browser window on the same Zope-site the response
> is generated after the above script is completed. This would mean that the
> script hoggs all threads.

actually it doesn't but it is good example of some zope's optimization. so 
whats happening here is that ZopeFind starts looking through all the objects 
of the folder trying to match up requirements, when it does that it means 
that all these objects are now loaded from the db and are in memory/cache. 
after the page gets served back to the client the zpublisher thread releases 
its connection to the zodb, this connection's cache contains all those 
objects just loaded. when another request is served the zpublisher thread 
opens up a connection to the zodb, internal to the db these connections are 
stored in a FIFO stack, so the zpublisher thread ends up getting and using 
the connection with all those objects sitting in cache, now when the find 
executes it basically is operating on objects that are all in memory!