On 8 December 2010 14:03, Hanno Schlichting <ha...@hannosch.eu> wrote:
> On Wed, Dec 8, 2010 at 11:06 AM, Malthe Borch <mbo...@gmail.com> wrote:
>> With 20 active threads, each having rendered the Plone 4 front page,
>> this approach reduced the memory usage with 70 MB.
> Did you measure throughput of the system? In the benchmarks I've seen
> threads numbers of 3 or above will perform worse than one or two
> threads. At least with the GIL implementation up to Python 2.6 you get
> much worse performance the more threads you have on multicore systems.
> There's good explanations of the behavior done by David Beazley at
I should have mentioned: I only chose 20 threads such that I might see
a noticeable difference in memory usage.
> In default Plone 4 we have two threads per instance. If you have more
> than a single ZEO instance you should reduce the thread number to one.
> We also set a default Python checkinterval of 1000 (instructions),
> which prevents thread switching for long stretches of time to counter
> the GIL in the two thread case.
I agree. As I mentioned to Jim, there's a classic case of running two
threads. However, there's also a case of running more if you expected
to be swapping data in and out at regular intervals.
> So while sharing data between threads might sound interesting, it's
> not of much help in Python.
I think it's worthwhile even sharing immutable data between two
threads, if it's a relatively straight-forward procedure. I think my
initial investigation shows that it is.
For more information about ZODB, see the ZODB Wiki:
ZODB-Dev mailing list - ZODB-Dev@zope.org