]> granicus.if.org Git - postgresql/commitdiff
add to threads discussion.
authorBruce Momjian <bruce@momjian.us>
Thu, 9 Jan 2003 01:04:35 +0000 (01:04 +0000)
committerBruce Momjian <bruce@momjian.us>
Thu, 9 Jan 2003 01:04:35 +0000 (01:04 +0000)
doc/TODO.detail/thread

index 598385ec636c20fdd1e07c38f811e15bbc74c23a..28b40bee69ca2fdc6c637dbaf8fffbe68b57f461 100644 (file)
@@ -1493,3 +1493,2447 @@ TIP 3: if posting/reading through Usenet, please send an appropriate
 subscribe-nomail command to majordomo@postgresql.org so that your
 message can get through to the mailing list cleanly
 
+From pgsql-hackers-owner+M33671@postgresql.org Fri Jan  3 10:27:00 2003
+Return-path: <pgsql-hackers-owner+M33671@postgresql.org>
+Received: from postgresql.org (postgresql.org [64.49.215.8])
+       by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id h03FQwl07124
+       for <pgman@candle.pha.pa.us>; Fri, 3 Jan 2003 10:26:58 -0500 (EST)
+Received: from localhost (postgresql.org [64.49.215.8])
+       by postgresql.org (Postfix) with ESMTP
+       id EDEBC4764DE; Fri,  3 Jan 2003 10:26:53 -0500 (EST)
+Received: from postgresql.org (postgresql.org [64.49.215.8])
+       by postgresql.org (Postfix) with SMTP
+       id 31554476422; Fri,  3 Jan 2003 10:25:46 -0500 (EST)
+Received: from localhost (postgresql.org [64.49.215.8])
+       by postgresql.org (Postfix) with ESMTP id 69252476286
+       for <pgsql-hackers@postgresql.org>; Fri,  3 Jan 2003 10:25:29 -0500 (EST)
+Received: from www.pspl.co.in (www.pspl.co.in [202.54.11.65])
+       by postgresql.org (Postfix) with ESMTP id 98F754764C3
+       for <pgsql-hackers@postgresql.org>; Fri,  3 Jan 2003 10:23:52 -0500 (EST)
+Received: (from root@localhost)
+       by www.pspl.co.in (8.11.6/8.11.6) id h03FNtK17518
+       for <pgsql-hackers@postgresql.org>; Fri, 3 Jan 2003 20:53:55 +0530
+Received: from daithan.itnranet.pspl.co.in (daithan.intranet.pspl.co.in [192.168.7.161])
+       by www.pspl.co.in (8.11.6/8.11.0) with ESMTP id h03FNsf17512
+       for <pgsql-hackers@postgresql.org>; Fri, 3 Jan 2003 20:53:54 +0530
+From: Shridhar Daithankar <shridhar_daithankar@persistent.co.in>
+To: PGHackers <pgsql-hackers@postgresql.org>
+Subject: [HACKERS] Threads
+Date: Fri, 3 Jan 2003 20:54:11 +0530
+User-Agent: KMail/1.4.3
+MIME-Version: 1.0
+Content-Type: Multipart/Mixed;
+  boundary="------------Boundary-00=_BG9530ZI94UNRKSGBVL5"
+Message-ID: <200301032054.11125.shridhar_daithankar@persistent.co.in>
+X-Virus-Scanned: by AMaViS new-20020517
+Precedence: bulk
+Sender: pgsql-hackers-owner@postgresql.org
+X-Virus-Scanned: by AMaViS new-20020517
+Status: OR
+
+--------------Boundary-00=_BG9530ZI94UNRKSGBVL5
+Content-Type: text/plain;
+  charset="us-ascii"
+Content-Transfer-Encoding: quoted-printable
+
+Hi all,
+
+I am sure, many of you would like to delete this message before reading, ho=
+ld=20
+on. :-)
+
+There is much talk about threading on this list and the idea is always=20
+deferred for want of robust thread models across all supported platforms an=
+d=20
+feasibility of gains v/s efforts required.
+
+I think threads are useful in difference situations namely parallelising=20
+blocking conditions and using multiple CPUs.
+
+Attached is a framework that I ported to C from a C++ server I have written=
+.=20
+It has threadpool and threads implementation based on pthreads.
+
+This code expects minimum pthreads implementation and does not assume anyth=
+ing=20
+on threads part (e.g kernel threads or not etc.)
+
+I request hackers on this list to take a look at it. It should be easily=20
+pluggable in any source code and is released without any strings for any us=
+e.
+
+This framework allows to plug-in the worker function and argument on the fl=
+y.=20
+The threads created are sleeping by default and can be woken up s and when=
+=20
+required.
+
+I propose to use it incrementally in postgresql. Let's start with I/O. When=
+ a=20
+block of data is being read, rather than blocking for read, we can set up=
+=20
+creator-consumer link between two threads That we way can utilize that I/O=
+=20
+time in a overlapped fashion.
+
+Further threads can be useful when the server has more CPUs. It can spread =
+CPU=20
+intensive work to different threads such as index creation or sorting. This=
+=20
+way we can utilise idle CPU which we can not as of now.
+
+There are many advantages that I can see.
+
+1)Threads can be optionally turned on/off depending upon the configuration.=
+ So=20
+we can entirely keep existing functionality and convert them one-by-one to=
+=20
+threaded application.
+
+2)For each functionality we can have two code branches, one that do not use=
+=20
+threads i.e. current code base and one that can use threads. Agreed the=20
+binary will be bit bloated but that would give enormous flexibility. If we=
+=20
+find a thread implementation buggy, we simply switch it off either in=20
+compilation or inconfiguration.
+
+3) Not much efforts should be required to plug code into this model. The id=
+ea=20
+of using threads is to assign exclusive work to each thread. So that should=
+=20
+not require much of a locking.
+
+In case of using multiple CPUs, separate functions need be written that can=
+=20
+handle the things in a thread-safe fashion. Also a merger function would be=
+=20
+required which would merge results of worker threads. That would be totally=
+=20
+additional.
+
+I would say two threads per CPU per back-end should be a reasonable default=
+ as=20
+that would cover I/O blocking well. Of course unless threading is turned of=
+f=20
+in build or in configuration.
+
+Please note that I have tested the code in C++ and my C is rusty. Quite lik=
+ely=20
+there are bugs in the code. I will stress test the code on monday but I wou=
+ld=20
+like to seek an opinion on this as soon as possible. ( Hey but it compiles=
+=20
+clean..)
+
+If required I can post example usage of this code, but I don't think that=
+=20
+should be necessary.:-)
+
+Bye
+ Shridhar
+
+--------------Boundary-00=_BG9530ZI94UNRKSGBVL5
+Content-Type: text/x-chdr;
+  charset="us-ascii";
+  name="thread.h"
+Content-Transfer-Encoding: 7bit
+Content-Disposition: attachment; filename="thread.h"
+
+#define _REENTRANT
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <pthread.h>
+#include <unistd.h>
+
+
+//typedefs
+typedef void* (*function)(void *);
+typedef void* argtype;
+
+typedef struct
+{
+ pthread_mutex_t lock;
+ pthread_cond_t cond;
+
+ unsigned short freeCount,n,count;
+ void *pool;
+
+} threadPool;
+
+typedef struct
+{
+ pthread_t t;
+ pthread_attr_t tattr;
+ pthread_mutex_t lock;
+ pthread_cond_t cond;
+
+ argtype arg;
+ function f;
+
+ unsigned short quit;
+ threadPool *p;
+
+} thread;
+
+/*Thread functions*/
+void initThread(thread **t,threadPool *pool);
+void deleteThread(thread **t);
+void stop(thread *thr);
+
+void wakeForWork(thread *thr,function func,argtype a);
+
+argtype runner(void *ptr);
+
+/*thread pool functions*/
+void initPool(threadPool **pool,unsigned short numthreads);
+void deletePool(threadPool **p);
+
+void putThread(threadPool *p,thread *t);
+thread *getThread(threadPool *p);
+
+
+
+
+
+
+--------------Boundary-00=_BG9530ZI94UNRKSGBVL5
+Content-Type: text/x-csrc;
+  charset="us-ascii";
+  name="thread.c"
+Content-Transfer-Encoding: 7bit
+Content-Disposition: attachment; filename="thread.c"
+
+#include "thread.h"
+
+void initThread(thread **t,threadPool *pool)
+{
+ thread *thr=(thread *)malloc(sizeof(thread));
+
+ if(!thr)
+ {
+  fprintf(stderr,"\nCan not allocate memory for thread. Quitting...\n");
+  exit(1);
+ }
+
+ *t=thr;
+
+ pthread_attr_init(&(thr->tattr));
+ pthread_mutex_init(&(thr->lock), NULL);
+ pthread_cond_init(&(thr->cond), NULL);
+
+ pthread_attr_setdetachstate(&(thr->tattr),PTHREAD_CREATE_DETACHED);
+
+ thr->quit=0;
+ thr->p=pool;
+
+ //Create the thread
+ int ret=pthread_create(&(thr->t),&(thr->tattr),runner,(void *)thr);
+
+ if(ret!=0)
+ {
+  fprintf(stderr,"\nCan not create thread. Quitting...\n");
+  exit(1);
+ }
+}
+
+void deleteThread(thread **t)
+{
+ thread *thr=*t;
+
+ if(!t) return;
+
+ stop(thr);
+
+ pthread_attr_destroy(&(thr->tattr));
+ pthread_cond_destroy(&(thr->cond));
+ pthread_mutex_destroy(&(thr->lock));
+
+ free(thr);
+}
+
+void stop(thread *thr)
+{
+ unsigned short i;
+ thr->quit=1;
+
+ pthread_cond_signal(&(thr->cond));
+
+ for(i=0;thr->quit && i<10;i++)
+ {
+   if(i>=10)
+   {
+       pthread_kill(thr->t,9);
+       break;
+   }
+   usleep(400);
+  }
+}
+
+void wakeForWork(thread *thr,function func,argtype a)
+{
+ thr->f=func;
+ thr->arg=a;
+
+ pthread_cond_signal(&(thr->cond));
+}
+
+argtype runner(void* arg)
+{
+ thread *ptr=(thread *)arg;
+
+ while(1)
+ {
+  pthread_mutex_lock(&(ptr->lock));
+
+  if(ptr->p)
+   putThread(ptr->p,ptr);
+
+  pthread_cond_wait(&(ptr->cond),&(ptr->lock));
+
+  if(ptr->quit) break;
+
+  ptr->f((void *)ptr->arg);
+
+  pthread_mutex_unlock(&(ptr->lock));
+ }
+
+ ptr->quit=0;
+
+ return NULL;
+}
+
+
+void initPool(threadPool **pool,unsigned short numthreads)
+{
+ thread **thr;
+ threadPool *p=(threadPool *)malloc(sizeof(threadPool));
+
+ if(!p)
+ {
+  fprintf(stderr,"Can not get memory to create threadpool. Quitting\n");
+  exit(1);
+ }
+ if(!pool)
+ {
+  free(p);
+  return;
+ }
+
+ *pool=p;
+
+ pthread_mutex_init(&(p->lock), NULL);
+ pthread_cond_init(&(p->cond), NULL);
+
+ p->n=numthreads;
+ p->freeCount=0;
+ p->n=numthreads;
+
+ thr=(thread **)malloc(numthreads*sizeof(thread *));
+
+ if(!thr)
+ {
+  fprintf(stderr,"Can not get memory to create pool of threads. Quitting\n");
+  exit(1);
+ }
+
+ p->pool=(void *)thr;
+
+}
+
+void deletePool(threadPool **pool)
+{
+ threadPool *p=(threadPool *)pool;
+
+ if(!pool) return;
+
+ thread **thr=(thread **)p->pool;
+ unsigned short i;
+
+ for(i=0;i<p->n;i++) stop(thr[i]);
+
+ free(p->pool);
+
+ pthread_cond_destroy(&(p->cond));
+ pthread_mutex_destroy(&(p->lock));
+
+ free(p);
+
+}
+
+void putThread(threadPool *p,thread *t)
+{
+ unsigned short i;
+ thread **pool;
+
+ if(!p || !t) return;
+
+ pool=(thread **)p->pool;
+
+ pthread_mutex_lock(&(p->lock));
+
+ i=p->freeCount;
+ pool[(p->freeCount)++]=t;
+
+ if(i<=0)pthread_cond_signal(&(p->cond));
+
+ pthread_mutex_unlock(&(p->lock));
+
+}
+
+thread *getThread(threadPool *p)
+{
+ thread *t,**t1;
+
+ if(!p) return NULL;
+
+ t1=(thread **)p->pool;
+
+ pthread_mutex_lock(&(p->lock));
+
+ if((p->freeCount)<=0)pthread_cond_wait(&(p->cond),&(p->lock));
+
+ t=t1[--(p->freeCount)];
+
+ pthread_mutex_unlock(&(p->lock));
+
+ return t;
+
+}
+
+--------------Boundary-00=_BG9530ZI94UNRKSGBVL5
+Content-Type: text/plain
+Content-Disposition: inline
+Content-Transfer-Encoding: 8bit
+MIME-Version: 1.0
+
+
+---------------------------(end of broadcast)---------------------------
+TIP 6: Have you searched our list archives?
+
+http://archives.postgresql.org
+
+--------------Boundary-00=_BG9530ZI94UNRKSGBVL5--
+
+
+From pgsql-hackers-owner+M33682@postgresql.org Fri Jan  3 15:43:54 2003
+Return-path: <pgsql-hackers-owner+M33682@postgresql.org>
+Received: from postgresql.org (postgresql.org [64.49.215.8])
+       by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id h03Khhl06938
+       for <pgman@candle.pha.pa.us>; Fri, 3 Jan 2003 15:43:45 -0500 (EST)
+Received: from localhost (postgresql.org [64.49.215.8])
+       by postgresql.org (Postfix) with ESMTP
+       id DF70F476EA6; Fri,  3 Jan 2003 15:43:34 -0500 (EST)
+Received: from postgresql.org (postgresql.org [64.49.215.8])
+       by postgresql.org (Postfix) with SMTP
+       id 95BA8476514; Fri,  3 Jan 2003 15:43:26 -0500 (EST)
+Received: from localhost (postgresql.org [64.49.215.8])
+       by postgresql.org (Postfix) with ESMTP id 71F4E475DBC
+       for <pgsql-hackers@postgresql.org>; Fri,  3 Jan 2003 15:43:14 -0500 (EST)
+Received: from snoopy.mohawksoft.com (h0030f1382639.ne.client2.attbi.com [24.60.194.163])
+       by postgresql.org (Postfix) with ESMTP id ACE5B475DAD
+       for <pgsql-hackers@postgresql.org>; Fri,  3 Jan 2003 15:43:13 -0500 (EST)
+Received: from mohawksoft.com (snoopy.mohawksoft.com [127.0.0.1])
+       by snoopy.mohawksoft.com (8.11.6/8.11.6) with ESMTP id h03KlMs24421;
+       Fri, 3 Jan 2003 15:47:27 -0500
+Message-ID: <3E15F6DA.8000209@mohawksoft.com>
+Date: Fri, 03 Jan 2003 15:47:22 -0500
+From: mlw <pgsql@mohawksoft.com>
+User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.0.1) Gecko/20020823 Netscape/7.0
+X-Accept-Language: en-us, en
+MIME-Version: 1.0
+To: Shridhar Daithankar <shridhar_daithankar@persistent.co.in>
+cc: PGHackers <pgsql-hackers@postgresql.org>
+Subject: Re: [HACKERS] Threads
+References: <200301032054.11125.shridhar_daithankar@persistent.co.in>
+Content-Type: text/plain; charset=us-ascii; format=flowed
+Content-Transfer-Encoding: 7bit
+X-Virus-Scanned: by AMaViS new-20020517
+Precedence: bulk
+Sender: pgsql-hackers-owner@postgresql.org
+X-Virus-Scanned: by AMaViS new-20020517
+Status: OR
+
+Please no threading threads!!!
+
+Has anyone calculated the interval and period of "PostgreSQL needs 
+threads" posts?
+
+The *ONLY* advantage threading has over multiple processes is the time 
+and resources used in creating new processes.
+
+That being said, I admit that creating a threaded program is easier than 
+one with multiple processes, but PostgreSQL is already there and working.
+
+Drawbacks to a threaded model:
+
+(1) One thread screws up, the whole process dies. In a multiple process 
+application this is not too much of an issue.
+
+(2) Heap fragmentation. In a long uptime application, such as a 
+database, heap fragmentation is an important consideration. With 
+multiple processes, each process manages its own heap and what ever 
+fragmentation that exists goes away when the connection is closed.  A 
+threaded server is far more vulnerable because the heap has to manage 
+many threads and the heap has to stay active and unfragmented in 
+perpetuity. This is why Windows applications usually end up using 2G of 
+memory after 3 months of use. (Well, this AND memory leaks)
+
+(3) Stack space. In a threaded application they are more limits to stack 
+usage. I'm not sure, but I bet PostgreSQL would have a problem with a 
+fixed size stack, I know the old ODBC driver did.
+
+(4) Lock Contention. The various single points of access in a process 
+have to be serialized for multiple threads. heap allocation, 
+deallocation, etc all have to be managed. In a multple process model, 
+these resources would be separated by process contexts.
+
+(5) Lastly, why bother? Seriously? Process creation time is an issue 
+true, but its an issue with threads as well, just not as bad. Anyone who 
+is looking for performance should be using a connection pooling 
+mechanism as is done in things like PHP.
+
+I have done both threaded and process servers. The threaded servers are 
+easier to write. The process based severs are more robust. From an 
+operational point of view, a "select foo from bar where x > y" will take 
+he same amount of time.
+
+
+
+
+---------------------------(end of broadcast)---------------------------
+TIP 6: Have you searched our list archives?
+
+http://archives.postgresql.org
+
+From pgsql-hackers-owner+M33684@postgresql.org Fri Jan  3 15:56:48 2003
+Return-path: <pgsql-hackers-owner+M33684@postgresql.org>
+Received: from postgresql.org (postgresql.org [64.49.215.8])
+       by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id h03Kufl08003
+       for <pgman@candle.pha.pa.us>; Fri, 3 Jan 2003 15:56:43 -0500 (EST)
+Received: from localhost (postgresql.org [64.49.215.8])
+       by postgresql.org (Postfix) with ESMTP
+       id D0392477118; Fri,  3 Jan 2003 15:56:31 -0500 (EST)
+Received: from postgresql.org (postgresql.org [64.49.215.8])
+       by postgresql.org (Postfix) with SMTP
+       id 31FDC475461; Fri,  3 Jan 2003 15:55:26 -0500 (EST)
+Received: from localhost (postgresql.org [64.49.215.8])
+       by postgresql.org (Postfix) with ESMTP id BD892477147
+       for <pgsql-hackers@postgresql.org>; Fri,  3 Jan 2003 15:55:09 -0500 (EST)
+Received: from voyager.corporate.connx.com (unknown [209.20.248.131])
+       by postgresql.org (Postfix) with ESMTP id 7EE644771A0
+       for <pgsql-hackers@postgresql.org>; Fri,  3 Jan 2003 15:52:47 -0500 (EST)
+content-class: urn:content-classes:message
+Subject: Re: [HACKERS] Threads
+MIME-Version: 1.0
+Content-Type: text/plain;
+       charset="us-ascii"
+Date: Fri, 3 Jan 2003 12:52:48 -0800
+X-MimeOLE: Produced By Microsoft Exchange V6.0.6249.0
+Message-ID: <D90A5A6C612A39408103E6ECDD77B829408A20@voyager.corporate.connx.com>
+Thread-Topic: [HACKERS] Threads
+Thread-Index: AcKzaMsucwBFaOikSjKML8BqvR/gCAAACDPA
+From: "Dann Corbit" <DCorbit@connx.com>
+To: "PGHackers" <pgsql-hackers@postgresql.org>
+X-Virus-Scanned: by AMaViS new-20020517
+Precedence: bulk
+Sender: pgsql-hackers-owner@postgresql.org
+X-Virus-Scanned: by AMaViS new-20020517
+Content-Transfer-Encoding: 8bit
+X-MIME-Autoconverted: from quoted-printable to 8bit by candle.pha.pa.us id h03Kufl08003
+Status: OR
+
+> -----Original Message-----
+> From: mlw [mailto:pgsql@mohawksoft.com] 
+> Sent: Friday, January 03, 2003 12:47 PM
+> To: Shridhar Daithankar
+> Cc: PGHackers
+> Subject: Re: [HACKERS] Threads
+> 
+> 
+> Please no threading threads!!!
+> 
+> Has anyone calculated the interval and period of "PostgreSQL needs 
+> threads" posts?
+> 
+> The *ONLY* advantage threading has over multiple processes is 
+> the time 
+> and resources used in creating new processes.
+
+Threading is absurdly easier to do portably than fork().
+
+Will you fork() successfully on MVS, VMS, OS/2, Win32?
+
+On some operating systems, thread creation is absurdly faster than
+process creation (many orders of magnitude).
+> That being said, I admit that creating a threaded program is 
+> easier than 
+> one with multiple processes, but PostgreSQL is already there 
+> and working.
+> 
+> Drawbacks to a threaded model:
+> 
+> (1) One thread screws up, the whole process dies. In a 
+> multiple process 
+> application this is not too much of an issue.
+
+If you use C++ you can try/catch and nothing bad happens to anything but
+the naughty thread.
+> (2) Heap fragmentation. In a long uptime application, such as a 
+> database, heap fragmentation is an important consideration. With 
+> multiple processes, each process manages its own heap and what ever 
+> fragmentation that exists goes away when the connection is closed.  A 
+> threaded server is far more vulnerable because the heap has to manage 
+> many threads and the heap has to stay active and unfragmented in 
+> perpetuity. This is why Windows applications usually end up 
+> using 2G of 
+> memory after 3 months of use. (Well, this AND memory leaks)
+
+Poorly written applications leak memory.  Fragmentation is a legitimate
+concern.
+> (3) Stack space. In a threaded application they are more 
+> limits to stack 
+> usage. I'm not sure, but I bet PostgreSQL would have a problem with a 
+> fixed size stack, I know the old ODBC driver did.
+
+A single server with 20 threads will consume less total free store
+memory and automatic memory than 20 servers.  You have to decide how
+much stack to give a thread, that's true.
+> (4) Lock Contention. The various single points of access in a process 
+> have to be serialized for multiple threads. heap allocation, 
+> deallocation, etc all have to be managed. In a multple process model, 
+> these resources would be separated by process contexts.
+
+Semaphores are more complicated than critical sections.  If anything, a
+shared memory approach is more problematic and fragile, especially when
+porting to multiple operating systems.
+> (5) Lastly, why bother? Seriously? Process creation time is an issue 
+> true, but its an issue with threads as well, just not as bad. 
+> Anyone who 
+> is looking for performance should be using a connection pooling 
+> mechanism as is done in things like PHP.
+> 
+> I have done both threaded and process servers. The threaded 
+> servers are 
+> easier to write. The process based severs are more robust. From an 
+> operational point of view, a "select foo from bar where x > 
+> y" will take 
+> he same amount of time.
+
+Probably true.  I think a better solution is a server that can start
+threads or processes or both.  But that's neither here nor there and I'm
+certainly not volunteering to write it.
+
+Here is a solution to the dilemma.  Make the one who suggests the
+feature be the first volunteer on the team that writes it.
+
+Is it a FAQ?  If not, it ought to be.
+
+---------------------------(end of broadcast)---------------------------
+TIP 3: if posting/reading through Usenet, please send an appropriate
+subscribe-nomail command to majordomo@postgresql.org so that your
+message can get through to the mailing list cleanly
+
+From pgsql-hackers-owner+M33685@postgresql.org Fri Jan  3 16:35:02 2003
+Return-path: <pgsql-hackers-owner+M33685@postgresql.org>
+Received: from postgresql.org (postgresql.org [64.49.215.8])
+       by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id h03LYsl11402
+       for <pgman@candle.pha.pa.us>; Fri, 3 Jan 2003 16:34:56 -0500 (EST)
+Received: from localhost (postgresql.org [64.49.215.8])
+       by postgresql.org (Postfix) with ESMTP
+       id 0F09B477168; Fri,  3 Jan 2003 16:34:48 -0500 (EST)
+Received: from postgresql.org (postgresql.org [64.49.215.8])
+       by postgresql.org (Postfix) with SMTP
+       id C1A9C477132; Fri,  3 Jan 2003 16:34:39 -0500 (EST)
+Received: from localhost (postgresql.org [64.49.215.8])
+       by postgresql.org (Postfix) with ESMTP id D830847630B
+       for <pgsql-hackers@postgresql.org>; Fri,  3 Jan 2003 16:34:25 -0500 (EST)
+Received: from CopelandConsulting.Net (dsl-24293-ld.customer.centurytel.net [209.142.135.135])
+       by postgresql.org (Postfix) with ESMTP id 025DD476417
+       for <pgsql-hackers@postgresql.org>; Fri,  3 Jan 2003 16:34:24 -0500 (EST)
+Received: from [192.168.1.2] (mouse.copelandconsulting.net [192.168.1.2])
+       by CopelandConsulting.Net (8.10.1/8.10.1) with ESMTP id h03LY2700731;
+       Fri, 3 Jan 2003 15:34:03 -0600 (CST)
+X-Trade-Id: <CCC.Fri, 3 Jan 2003 15:34:03 -0600 (CST).Fri, 3 Jan 2003 15:34:03 -0600 (CST).200301032134.h03LY2700731.h03LY2700731@CopelandConsulting.Net.
+Subject: Re: [HACKERS] Threads
+From: Greg Copeland <greg@CopelandConsulting.Net>
+To: mlw <pgsql@mohawksoft.com>
+cc: Shridhar Daithankar <shridhar_daithankar@persistent.co.in>,
+   PGHackers <pgsql-hackers@postgresql.org>
+In-Reply-To: <3E15F6DA.8000209@mohawksoft.com>
+References: <200301032054.11125.shridhar_daithankar@persistent.co.in>
+  <3E15F6DA.8000209@mohawksoft.com>
+Content-Type: text/plain
+Organization: Copeland Computer Consulting
+Message-ID: <1041629649.15933.135.camel@mouse.copelandconsulting.net>
+MIME-Version: 1.0
+X-Mailer: Ximian Evolution 1.2.0 
+Date: 03 Jan 2003 15:34:10 -0600
+Content-Transfer-Encoding: 7bit
+X-Virus-Scanned: by AMaViS new-20020517
+Precedence: bulk
+Sender: pgsql-hackers-owner@postgresql.org
+X-Virus-Scanned: by AMaViS new-20020517
+Status: OR
+
+On Fri, 2003-01-03 at 14:47, mlw wrote:
+> Please no threading threads!!!
+> 
+
+Ya, I'm very pro threads but I've long since been sold on no threads for
+PostgreSQL.  AIO on the other hand... ;)
+
+Your summary so accurately addresses the issue it should be a whole FAQ
+entry on threads and PostgreSQL.  :)
+
+
+> Drawbacks to a threaded model:
+> 
+> (1) One thread screws up, the whole process dies. In a multiple process 
+> application this is not too much of an issue.
+> 
+> (2) Heap fragmentation. In a long uptime application, such as a 
+> database, heap fragmentation is an important consideration. With 
+> multiple processes, each process manages its own heap and what ever 
+> fragmentation that exists goes away when the connection is closed.  A 
+> threaded server is far more vulnerable because the heap has to manage 
+> many threads and the heap has to stay active and unfragmented in 
+> perpetuity. This is why Windows applications usually end up using 2G of 
+> memory after 3 months of use. (Well, this AND memory leaks)
+
+
+These are things that can't be stressed enough.  IMO, these are some of
+the many reasons why applications running on MS platforms tend to have
+much lower application and system up times (that and resources leaks
+which are inherent to the platform).
+
+BTW, if you do much in the way of threaded coding, there is libHorde
+which is a heap library for heavily threaded, memory hungry
+applications.  It excels in performance, reduces heap lock contention
+(maintains multiple heaps in a very thread smart manner), and goes a
+long way toward reducing heap fragmentation which is common for heavily
+memory based, threaded applications.
+
+
+> (3) Stack space. In a threaded application they are more limits to stack 
+> usage. I'm not sure, but I bet PostgreSQL would have a problem with a 
+> fixed size stack, I know the old ODBC driver did.
+> 
+
+Most modern thread implementations use a page guard on the stack to
+determine if it needs to grow or not.  Generally speaking, for most
+modern platforms which support threading, stack considerations rarely
+become an issue.
+
+
+> (5) Lastly, why bother? Seriously? Process creation time is an issue 
+> true, but its an issue with threads as well, just not as bad. Anyone who 
+> is looking for performance should be using a connection pooling 
+> mechanism as is done in things like PHP.
+> 
+> I have done both threaded and process servers. The threaded servers are 
+> easier to write. The process based severs are more robust. From an 
+> operational point of view, a "select foo from bar where x > y" will take 
+> he same amount of time.
+> 
+
+I agree with this, however, using threads does open the door for things
+like splitting queries and sorts across multiple CPUs.  Something the
+current process model, which was previously agreed on, would not be able
+to address because of cost.
+
+Example: "select foo from bar where x > y order by foo ;", could be run
+on multiple CPUs if the sort were large enough to justify.
+
+After it's all said and done, I do agree that threading just doesn't
+seem like a good fit for PostgreSQL.
+
+-- 
+Greg Copeland <greg@copelandconsulting.net>
+Copeland Computer Consulting
+
+
+---------------------------(end of broadcast)---------------------------
+TIP 4: Don't 'kill -9' the postmaster
+
+From pgsql-hackers-owner+M33686@postgresql.org Fri Jan  3 16:47:20 2003
+Return-path: <pgsql-hackers-owner+M33686@postgresql.org>
+Received: from postgresql.org (postgresql.org [64.49.215.8])
+       by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id h03LlBl12502
+       for <pgman@candle.pha.pa.us>; Fri, 3 Jan 2003 16:47:12 -0500 (EST)
+Received: from localhost (postgresql.org [64.49.215.8])
+       by postgresql.org (Postfix) with ESMTP
+       id 6873147621D; Fri,  3 Jan 2003 16:47:06 -0500 (EST)
+Received: from postgresql.org (postgresql.org [64.49.215.8])
+       by postgresql.org (Postfix) with SMTP
+       id 97466477133; Fri,  3 Jan 2003 16:46:41 -0500 (EST)
+Received: from localhost (postgresql.org [64.49.215.8])
+       by postgresql.org (Postfix) with ESMTP id E25BB477152
+       for <pgsql-hackers@postgresql.org>; Fri,  3 Jan 2003 16:46:24 -0500 (EST)
+Received: from CopelandConsulting.Net (dsl-24293-ld.customer.centurytel.net [209.142.135.135])
+       by postgresql.org (Postfix) with ESMTP id 84A87477157
+       for <pgsql-hackers@postgresql.org>; Fri,  3 Jan 2003 16:45:21 -0500 (EST)
+Received: from [192.168.1.2] (mouse.copelandconsulting.net [192.168.1.2])
+       by CopelandConsulting.Net (8.10.1/8.10.1) with ESMTP id h03LjC712426;
+       Fri, 3 Jan 2003 15:45:13 -0600 (CST)
+X-Trade-Id: <CCC.Fri, 3 Jan 2003 15:45:13 -0600 (CST).Fri, 3 Jan 2003 15:45:13 -0600 (CST).200301032145.h03LjC712426.h03LjC712426@CopelandConsulting.Net.
+Subject: Re: [HACKERS] Threads
+From: Greg Copeland <greg@CopelandConsulting.Net>
+To: Dann Corbit <DCorbit@connx.com>
+cc: PGHackers <pgsql-hackers@postgresql.org>
+In-Reply-To: <D90A5A6C612A39408103E6ECDD77B829408A20@voyager.corporate.connx.com>
+References:  <D90A5A6C612A39408103E6ECDD77B829408A20@voyager.corporate.connx.com>
+Content-Type: text/plain
+Organization: Copeland Computer Consulting
+Message-ID: <1041630319.15927.146.camel@mouse.copelandconsulting.net>
+MIME-Version: 1.0
+X-Mailer: Ximian Evolution 1.2.0 
+Date: 03 Jan 2003 15:45:20 -0600
+Content-Transfer-Encoding: 7bit
+X-Virus-Scanned: by AMaViS new-20020517
+Precedence: bulk
+Sender: pgsql-hackers-owner@postgresql.org
+X-Virus-Scanned: by AMaViS new-20020517
+Status: OR
+
+On Fri, 2003-01-03 at 14:52, Dann Corbit wrote:
+> > -----Original Message-----
+> > (1) One thread screws up, the whole process dies. In a 
+> > multiple process 
+> > application this is not too much of an issue.
+> 
+> If you use C++ you can try/catch and nothing bad happens to anything but
+> the naughty thread.
+
+That doesn't protect against the type of issues he's talking about. 
+Invalid pointer reference is a very common snafu which really hoses
+threaded applications.  Not to mention resource leaks AND LOCKED
+resources which are inherently an issue on Win32.
+
+Besides, it's doubtful that PostgreSQL is going to be rewritten in C++
+so bringing up try/catch is pretty much an invalid argument.
+
+>  
+> > (2) Heap fragmentation. In a long uptime application, such as a 
+> > database, heap fragmentation is an important consideration. With 
+> > multiple processes, each process manages its own heap and what ever 
+> > fragmentation that exists goes away when the connection is closed.  A 
+> > threaded server is far more vulnerable because the heap has to manage 
+> > many threads and the heap has to stay active and unfragmented in 
+> > perpetuity. This is why Windows applications usually end up 
+> > using 2G of 
+> > memory after 3 months of use. (Well, this AND memory leaks)
+> 
+> Poorly written applications leak memory.  Fragmentation is a legitimate
+> concern.
+
+And well written applications which attempt to safely handle segfaults,
+etc., often leak memory and lock resources like crazy.  On Win32,
+depending on the nature of the resources, once this happens, even
+process termination will not free/unlock the resources.
+
+> > (4) Lock Contention. The various single points of access in a process 
+> > have to be serialized for multiple threads. heap allocation, 
+> > deallocation, etc all have to be managed. In a multple process model, 
+> > these resources would be separated by process contexts.
+> 
+> Semaphores are more complicated than critical sections.  If anything, a
+> shared memory approach is more problematic and fragile, especially when
+> porting to multiple operating systems.
+
+And critical sections lead to low performance on SMP systems for Win32
+platforms.  No task can switch on ANY CPU for the duration of the
+critical section.  It's highly recommend by MS as the majority of Win32
+applications expect uniprocessor systems and they are VERY fast.  As
+soon as multiple processors come into the mix, critical sections become
+a HORRIBLE idea if any soft of scalability is desired.
+
+
+> Is it a FAQ?  If not, it ought to be.
+
+I agree.  I think mlw's list of reasons should be added to a faq.  It
+terse yet says it all!
+
+
+-- 
+Greg Copeland <greg@copelandconsulting.net>
+Copeland Computer Consulting
+
+
+---------------------------(end of broadcast)---------------------------
+TIP 2: you can get off all lists at once with the unregister command
+    (send "unregister YourEmailAddressHere" to majordomo@postgresql.org)
+
+From pgsql-hackers-owner+M33703@postgresql.org Fri Jan  3 20:41:10 2003
+Return-path: <pgsql-hackers-owner+M33703@postgresql.org>
+Received: from postgresql.org (postgresql.org [64.49.215.8])
+       by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id h041f9l05824
+       for <pgman@candle.pha.pa.us>; Fri, 3 Jan 2003 20:41:09 -0500 (EST)
+Received: from localhost (postgresql.org [64.49.215.8])
+       by postgresql.org (Postfix) with ESMTP
+       id 7F5764764C8; Fri,  3 Jan 2003 20:41:04 -0500 (EST)
+Received: from postgresql.org (postgresql.org [64.49.215.8])
+       by postgresql.org (Postfix) with SMTP
+       id BE24547606D; Fri,  3 Jan 2003 20:38:53 -0500 (EST)
+Received: from localhost (postgresql.org [64.49.215.8])
+       by postgresql.org (Postfix) with ESMTP id 4D50D476165
+       for <pgsql-hackers@postgresql.org>; Fri,  3 Jan 2003 20:38:39 -0500 (EST)
+Received: from sss.pgh.pa.us (unknown [192.204.191.242])
+       by postgresql.org (Postfix) with ESMTP id 20C8547659F
+       for <pgsql-hackers@postgresql.org>; Fri,  3 Jan 2003 20:34:10 -0500 (EST)
+Received: from sss2.sss.pgh.pa.us (tgl@localhost [127.0.0.1])
+       by sss.pgh.pa.us (8.12.6/8.12.6) with ESMTP id h041Y20U023764;
+       Fri, 3 Jan 2003 20:34:03 -0500 (EST)
+To: "Serguei Mokhov" <mokhov@cs.concordia.ca>
+cc: "Greg Copeland" <greg@CopelandConsulting.Net>,
+   "Dann Corbit" <DCorbit@connx.com>,
+   "PGHackers" <pgsql-hackers@postgresql.org>
+Subject: Re: [HACKERS] Threads 
+In-Reply-To: <004101c2b37b$0f261ae0$0301a8c0@gunnymede.lan> 
+References: <D90A5A6C612A39408103E6ECDD77B829408A20@voyager.corporate.connx.com> <1041630319.15927.146.camel@mouse.copelandconsulting.net> <004101c2b37b$0f261ae0$0301a8c0@gunnymede.lan>
+Comments: In-reply-to "Serguei Mokhov" <mokhov@cs.concordia.ca>
+       message dated "Fri, 03 Jan 2003 17:54:20 -0500"
+Date: Fri, 03 Jan 2003 20:34:02 -0500
+Message-ID: <23763.1041644042@sss.pgh.pa.us>
+From: Tom Lane <tgl@sss.pgh.pa.us>
+X-Virus-Scanned: by AMaViS new-20020517
+Precedence: bulk
+Sender: pgsql-hackers-owner@postgresql.org
+X-Virus-Scanned: by AMaViS new-20020517
+Status: OR
+
+"Serguei Mokhov" <mokhov@cs.concordia.ca> writes:
+>>> (1) One thread screws up, the whole process dies. In a 
+>>> multiple process application this is not too much of an issue.
+
+> (1) is an issue only for user-level threads.
+
+Uh, what other kind of thread have you got in mind here?
+
+I suppose the lack-of-cross-thread-protection issue would go away if
+our objective was only to use threads for internal parallelism in each
+backend instance (ie, you still have one process per connection, but
+internally it would use multiple threads to process subqueries in
+parallel).
+
+Of course that gives up the hope of faster connection startup that has
+always been touted as a major reason to want Postgres to be threaded...
+
+                       regards, tom lane
+
+---------------------------(end of broadcast)---------------------------
+TIP 5: Have you checked our extensive FAQ?
+
+http://www.postgresql.org/users-lounge/docs/faq.html
+
+From pgsql-hackers-owner+M33706@postgresql.org Fri Jan  3 21:16:55 2003
+Return-path: <pgsql-hackers-owner+M33706@postgresql.org>
+Received: from postgresql.org (postgresql.org [64.49.215.8])
+       by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id h042Gsl08584
+       for <pgman@candle.pha.pa.us>; Fri, 3 Jan 2003 21:16:54 -0500 (EST)
+Received: from localhost (postgresql.org [64.49.215.8])
+       by postgresql.org (Postfix) with ESMTP
+       id 8F2EB475E22; Fri,  3 Jan 2003 21:16:49 -0500 (EST)
+Received: from postgresql.org (postgresql.org [64.49.215.8])
+       by postgresql.org (Postfix) with SMTP
+       id 72017475FDA; Fri,  3 Jan 2003 21:15:21 -0500 (EST)
+Received: from localhost (postgresql.org [64.49.215.8])
+       by postgresql.org (Postfix) with ESMTP id EA790476242
+       for <pgsql-hackers@postgresql.org>; Fri,  3 Jan 2003 21:15:00 -0500 (EST)
+Received: from CopelandConsulting.Net (dsl-24293-ld.customer.centurytel.net [209.142.135.135])
+       by postgresql.org (Postfix) with ESMTP id BB7A0475D0D
+       for <pgsql-hackers@postgresql.org>; Fri,  3 Jan 2003 21:11:20 -0500 (EST)
+Received: from [192.168.1.2] (mouse.copelandconsulting.net [192.168.1.2])
+       by CopelandConsulting.Net (8.10.1/8.10.1) with ESMTP id h042B8729407;
+       Fri, 3 Jan 2003 20:11:08 -0600 (CST)
+X-Trade-Id: <CCC.Fri, 3 Jan 2003 20:11:08 -0600 (CST).Fri, 3 Jan 2003 20:11:08 -0600 (CST).200301040211.h042B8729407.h042B8729407@CopelandConsulting.Net.
+Subject: Re: [HACKERS] Threads
+From: Greg Copeland <greg@CopelandConsulting.Net>
+To: Tom Lane <tgl@sss.pgh.pa.us>
+cc: Serguei Mokhov <mokhov@cs.concordia.ca>, Dann Corbit <DCorbit@connx.com>,
+   PGHackers <pgsql-hackers@postgresql.org>
+In-Reply-To: <23763.1041644042@sss.pgh.pa.us>
+References:  <D90A5A6C612A39408103E6ECDD77B829408A20@voyager.corporate.connx.com>
+  <1041630319.15927.146.camel@mouse.copelandconsulting.net>
+  <004101c2b37b$0f261ae0$0301a8c0@gunnymede.lan>
+  <23763.1041644042@sss.pgh.pa.us>
+Content-Type: text/plain
+Organization: Copeland Computer Consulting
+Message-ID: <1041646276.15927.202.camel@mouse.copelandconsulting.net>
+MIME-Version: 1.0
+X-Mailer: Ximian Evolution 1.2.0 
+Date: 03 Jan 2003 20:11:17 -0600
+Content-Transfer-Encoding: 7bit
+X-Virus-Scanned: by AMaViS new-20020517
+Precedence: bulk
+Sender: pgsql-hackers-owner@postgresql.org
+X-Virus-Scanned: by AMaViS new-20020517
+Status: OR
+
+On Fri, 2003-01-03 at 19:34, Tom Lane wrote:
+> "Serguei Mokhov" <mokhov@cs.concordia.ca> writes:
+> >>> (1) One thread screws up, the whole process dies. In a 
+> >>> multiple process application this is not too much of an issue.
+> 
+> > (1) is an issue only for user-level threads.
+> 
+
+
+Umm.  No.  User or system level threads, the statement is true.  If a
+thread kills over, the process goes with it.  Furthermore, on Win32
+platforms, it opens a whole can of worms no matter how you care to
+address it.
+
+> Uh, what other kind of thread have you got in mind here?
+> 
+> I suppose the lack-of-cross-thread-protection issue would go away if
+> our objective was only to use threads for internal parallelism in each
+> backend instance (ie, you still have one process per connection, but
+> internally it would use multiple threads to process subqueries in
+> parallel).
+> 
+
+Several have previously spoken about a hybrid approach (ala Apache). 
+IIRC, it was never ruled out but it was simply stated that no one had
+the energy to put into such a concept.
+
+> Of course that gives up the hope of faster connection startup that has
+> always been touted as a major reason to want Postgres to be threaded...
+> 
+>                      regards, tom lane
+
+Faster startup, should never be the primary reason as there are many
+ways to address that issue already.  Connection pooling and caching are
+by far, the most common way to address this issue.  Not only that, but
+by definition, it's almost an oxymoron.  If you really need high
+performance, you shouldn't be using transient connections, no matter how
+fast they are.  This, in turn, brings you back to persistent connections
+or connection pools/caches.
+
+
+-- 
+Greg Copeland <greg@copelandconsulting.net>
+Copeland Computer Consulting
+
+
+---------------------------(end of broadcast)---------------------------
+TIP 4: Don't 'kill -9' the postmaster
+
+From pgsql-hackers-owner+M33709@postgresql.org Fri Jan  3 22:39:26 2003
+Return-path: <pgsql-hackers-owner+M33709@postgresql.org>
+Received: from postgresql.org (postgresql.org [64.49.215.8])
+       by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id h043dOl13614
+       for <pgman@candle.pha.pa.us>; Fri, 3 Jan 2003 22:39:25 -0500 (EST)
+Received: from localhost (postgresql.org [64.49.215.8])
+       by postgresql.org (Postfix) with ESMTP
+       id CA13B47621C; Fri,  3 Jan 2003 22:39:20 -0500 (EST)
+Received: from postgresql.org (postgresql.org [64.49.215.8])
+       by postgresql.org (Postfix) with SMTP
+       id 8DE1D475DFF; Fri,  3 Jan 2003 22:39:04 -0500 (EST)
+Received: from localhost (postgresql.org [64.49.215.8])
+       by postgresql.org (Postfix) with ESMTP id 15AA1475AFF
+       for <pgsql-hackers@postgresql.org>; Fri,  3 Jan 2003 22:39:00 -0500 (EST)
+Received: from CopelandConsulting.Net (dsl-24293-ld.customer.centurytel.net [209.142.135.135])
+       by postgresql.org (Postfix) with ESMTP id 19D8F475ADD
+       for <pgsql-hackers@postgresql.org>; Fri,  3 Jan 2003 22:38:59 -0500 (EST)
+Received: from [192.168.1.2] (mouse.copelandconsulting.net [192.168.1.2])
+       by CopelandConsulting.Net (8.10.1/8.10.1) with ESMTP id h043ca714568;
+       Fri, 3 Jan 2003 21:38:36 -0600 (CST)
+X-Trade-Id: <CCC.Fri, 3 Jan 2003 21:38:36 -0600 (CST).Fri, 3 Jan 2003 21:38:36 -0600 (CST).200301040338.h043ca714568.h043ca714568@CopelandConsulting.Net.
+Subject: Re: [HACKERS] Threads
+From: Greg Copeland <greg@CopelandConsulting.Net>
+To: mlw <pgsql@mohawksoft.com>
+cc: Tom Lane <tgl@sss.pgh.pa.us>, Serguei Mokhov <mokhov@cs.concordia.ca>,
+   Dann Corbit <DCorbit@connx.com>, PGHackers <pgsql-hackers@postgresql.org>
+In-Reply-To: <3E16575C.1030805@mohawksoft.com>
+References:  <D90A5A6C612A39408103E6ECDD77B829408A20@voyager.corporate.connx.com>
+  <1041630319.15927.146.camel@mouse.copelandconsulting.net>
+  <004101c2b37b$0f261ae0$0301a8c0@gunnymede.lan>
+  <23763.1041644042@sss.pgh.pa.us>
+  <1041646276.15927.202.camel@mouse.copelandconsulting.net>
+  <3E16575C.1030805@mohawksoft.com>
+Content-Type: text/plain
+Organization: Copeland Computer Consulting
+Message-ID: <1041651525.15927.207.camel@mouse.copelandconsulting.net>
+MIME-Version: 1.0
+X-Mailer: Ximian Evolution 1.2.0 
+Date: 03 Jan 2003 21:38:46 -0600
+Content-Transfer-Encoding: 7bit
+X-Virus-Scanned: by AMaViS new-20020517
+Precedence: bulk
+Sender: pgsql-hackers-owner@postgresql.org
+X-Virus-Scanned: by AMaViS new-20020517
+Status: OR
+
+On Fri, 2003-01-03 at 21:39, mlw wrote:
+> Connection time should *never* be in the critical path. There, I've
+> said it!! People who complain about connection time are barking up the
+> wrong tree. Regardless of the methodology, EVERY OS has issues with
+> thread creation, process creation, the memory allocation, and system
+> manipulation  required to manage it. Under load this is ALWAYS slower.
+> 
+> I think that if there is ever a choice, "do I make startup time
+> faster?" or "Do I make PostgreSQL not need a dump/restore for upgrade"
+> the upgrade problem has a much higher impact to real PostgreSQL sites.
+
+
+Exactly.  Trying to speed up something that shouldn't be in the critical
+path is exactly what I'm talking about.
+
+I completely agree with you!
+
+
+-- 
+Greg Copeland <greg@copelandconsulting.net>
+Copeland Computer Consulting
+
+
+---------------------------(end of broadcast)---------------------------
+TIP 4: Don't 'kill -9' the postmaster
+
+From pgsql-hackers-owner+M33708@postgresql.org Fri Jan  3 22:35:26 2003
+Return-path: <pgsql-hackers-owner+M33708@postgresql.org>
+Received: from postgresql.org (postgresql.org [64.49.215.8])
+       by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id h043ZOl13418
+       for <pgman@candle.pha.pa.us>; Fri, 3 Jan 2003 22:35:25 -0500 (EST)
+Received: from localhost (postgresql.org [64.49.215.8])
+       by postgresql.org (Postfix) with ESMTP
+       id 2277B475FDA; Fri,  3 Jan 2003 22:35:21 -0500 (EST)
+Received: from postgresql.org (postgresql.org [64.49.215.8])
+       by postgresql.org (Postfix) with SMTP
+       id DA681475E18; Fri,  3 Jan 2003 22:35:12 -0500 (EST)
+Received: from localhost (postgresql.org [64.49.215.8])
+       by postgresql.org (Postfix) with ESMTP id 8254047595A
+       for <pgsql-hackers@postgresql.org>; Fri,  3 Jan 2003 22:34:58 -0500 (EST)
+Received: from snoopy.mohawksoft.com (h0030f1382639.ne.client2.attbi.com [24.60.194.163])
+       by postgresql.org (Postfix) with ESMTP id A4D60475921
+       for <pgsql-hackers@postgresql.org>; Fri,  3 Jan 2003 22:34:57 -0500 (EST)
+Received: from mohawksoft.com (snoopy.mohawksoft.com [127.0.0.1])
+       by snoopy.mohawksoft.com (8.11.6/8.11.6) with ESMTP id h043d8s26180;
+       Fri, 3 Jan 2003 22:39:09 -0500
+Message-ID: <3E16575C.1030805@mohawksoft.com>
+Date: Fri, 03 Jan 2003 22:39:08 -0500
+From: mlw <pgsql@mohawksoft.com>
+User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.0.1) Gecko/20020823 Netscape/7.0
+X-Accept-Language: en-us, en
+MIME-Version: 1.0
+To: Greg Copeland <greg@CopelandConsulting.Net>
+cc: Tom Lane <tgl@sss.pgh.pa.us>, Serguei Mokhov <mokhov@cs.concordia.ca>,
+   Dann Corbit <DCorbit@connx.com>, PGHackers <pgsql-hackers@postgresql.org>
+Subject: Re: [HACKERS] Threads
+References: <D90A5A6C612A39408103E6ECDD77B829408A20@voyager.corporate.connx.com>        <1041630319.15927.146.camel@mouse.copelandconsulting.net>       <004101c2b37b$0f261ae0$0301a8c0@gunnymede.lan>  <23763.1041644042@sss.pgh.pa.us> <1041646276.15927.202.camel@mouse.copelandconsulting.net>
+Content-Type: multipart/alternative;
+       boundary="------------030005060103020905060907"
+X-Virus-Scanned: by AMaViS new-20020517
+Precedence: bulk
+Sender: pgsql-hackers-owner@postgresql.org
+X-Virus-Scanned: by AMaViS new-20020517
+Status: OR
+
+--------------030005060103020905060907
+Content-Type: text/plain; charset=us-ascii; format=flowed
+Content-Transfer-Encoding: 7bit
+
+
+
+Greg Copeland wrote:
+
+>  
+>
+>>Of course that gives up the hope of faster connection startup that has
+>>always been touted as a major reason to want Postgres to be threaded...
+>>
+>>                     regards, tom lane
+>>    
+>>
+>
+>Faster startup, should never be the primary reason as there are many
+>ways to address that issue already.  Connection pooling and caching are
+>by far, the most common way to address this issue.  Not only that, but
+>by definition, it's almost an oxymoron.  If you really need high
+>performance, you shouldn't be using transient connections, no matter how
+>fast they are.  This, in turn, brings you back to persistent connections
+>or connection pools/caches.
+>
+Connection time should *never* be in the critical path. There, I've said 
+it!! People who complain about connection time are barking up the wrong 
+tree. Regardless of the methodology, EVERY OS has issues with thread 
+creation, process creation, the memory allocation, and system 
+manipulation  required to manage it. Under load this is ALWAYS slower.
+
+I think that if there is ever a choice, "do I make startup time faster?" 
+or "Do I make PostgreSQL not need a dump/restore for upgrade" the 
+upgrade problem has a much higher impact to real PostgreSQL sites.
+
+--------------030005060103020905060907
+Content-Type: text/html; charset=us-ascii
+Content-Transfer-Encoding: 7bit
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+  <title></title>
+</head>
+<body>
+<br>
+<br>
+Greg Copeland wrote:<br>
+<blockquote type="cite"
+ cite="mid1041646276.15927.202.camel@mouse.copelandconsulting.net">
+  <pre wrap="">
+  </pre>
+  <blockquote type="cite">
+    <pre wrap="">Of course that gives up the hope of faster connection startup that has
+always been touted as a major reason to want Postgres to be threaded...
+
+                       regards, tom lane
+    </pre>
+  </blockquote>
+  <pre wrap=""><!---->
+Faster startup, should never be the primary reason as there are many
+ways to address that issue already.  Connection pooling and caching are
+by far, the most common way to address this issue.  Not only that, but
+by definition, it's almost an oxymoron.  If you really need high
+performance, you shouldn't be using transient connections, no matter how
+fast they are.  This, in turn, brings you back to persistent connections
+or connection pools/caches.</pre>
+</blockquote>
+Connection time should *never* be in the critical path. There, I've said
+it!! People who complain about connection time are barking up the wrong tree.
+Regardless of the methodology, EVERY OS has issues with thread creation,
+process creation, the memory allocation, and system manipulation &nbsp;required
+to manage it. Under load this is ALWAYS slower. <br>
+<br>
+I think that if there is ever a choice, "do I make startup time faster?"
+or "Do I make PostgreSQL not need a dump/restore for upgrade" the upgrade
+problem has a much higher impact to real PostgreSQL sites.<br>
+</body>
+</html>
+
+--------------030005060103020905060907--
+
+
+From pgsql-hackers-owner+M33713@postgresql.org Sat Jan  4 00:34:04 2003
+Return-path: <pgsql-hackers-owner+M33713@postgresql.org>
+Received: from postgresql.org (postgresql.org [64.49.215.8])
+       by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id h045Y2l23520
+       for <pgman@candle.pha.pa.us>; Sat, 4 Jan 2003 00:34:02 -0500 (EST)
+Received: from localhost (postgresql.org [64.49.215.8])
+       by postgresql.org (Postfix) with ESMTP
+       id BCA39476226; Sat,  4 Jan 2003 00:33:56 -0500 (EST)
+Received: from postgresql.org (postgresql.org [64.49.215.8])
+       by postgresql.org (Postfix) with SMTP
+       id 1B030475F09; Sat,  4 Jan 2003 00:33:47 -0500 (EST)
+Received: from localhost (postgresql.org [64.49.215.8])
+       by postgresql.org (Postfix) with ESMTP id A42D847595A
+       for <pgsql-hackers@postgresql.org>; Sat,  4 Jan 2003 00:33:37 -0500 (EST)
+Received: from houston.familyhealth.com.au (unknown [203.59.48.253])
+       by postgresql.org (Postfix) with ESMTP id C14B4475921
+       for <pgsql-hackers@postgresql.org>; Sat,  4 Jan 2003 00:33:35 -0500 (EST)
+Received: from localhost (chriskl@localhost)
+       by houston.familyhealth.com.au (8.11.6/8.11.6) with ESMTP id h045XKt36362;
+       Sat, 4 Jan 2003 13:33:23 +0800 (WST)
+       (envelope-from chriskl@familyhealth.com.au)
+Date: Sat, 4 Jan 2003 13:33:20 +0800 (WST)
+From: Christopher Kings-Lynne <chriskl@familyhealth.com.au>
+To: mlw <pgsql@mohawksoft.com>
+cc: Shridhar Daithankar <shridhar_daithankar@persistent.co.in>,
+   PGHackers <pgsql-hackers@postgresql.org>
+Subject: Re: [HACKERS] Threads
+In-Reply-To: <3E15F6DA.8000209@mohawksoft.com>
+Message-ID: <20030104133226.N36192-100000@houston.familyhealth.com.au>
+MIME-Version: 1.0
+Content-Type: TEXT/PLAIN; charset=US-ASCII
+X-Virus-Scanned: by AMaViS new-20020517
+Precedence: bulk
+Sender: pgsql-hackers-owner@postgresql.org
+X-Virus-Scanned: by AMaViS new-20020517
+Status: OR
+
+Also remember that in even well developed OS's like FreeBSD, all a
+process's threads will execute only on one CPU.  This might change in
+FreeBSD 5.0, but still a threaded app (such as MySQL) cannot use mutliple
+CPUs on a FreeBSD system.
+
+Chris
+
+On Fri, 3 Jan 2003, mlw wrote:
+
+> Please no threading threads!!!
+>
+> Has anyone calculated the interval and period of "PostgreSQL needs
+> threads" posts?
+>
+> The *ONLY* advantage threading has over multiple processes is the time
+> and resources used in creating new processes.
+>
+> That being said, I admit that creating a threaded program is easier than
+> one with multiple processes, but PostgreSQL is already there and working.
+>
+> Drawbacks to a threaded model:
+>
+> (1) One thread screws up, the whole process dies. In a multiple process
+> application this is not too much of an issue.
+>
+> (2) Heap fragmentation. In a long uptime application, such as a
+> database, heap fragmentation is an important consideration. With
+> multiple processes, each process manages its own heap and what ever
+> fragmentation that exists goes away when the connection is closed.  A
+> threaded server is far more vulnerable because the heap has to manage
+> many threads and the heap has to stay active and unfragmented in
+> perpetuity. This is why Windows applications usually end up using 2G of
+> memory after 3 months of use. (Well, this AND memory leaks)
+>
+> (3) Stack space. In a threaded application they are more limits to stack
+> usage. I'm not sure, but I bet PostgreSQL would have a problem with a
+> fixed size stack, I know the old ODBC driver did.
+>
+> (4) Lock Contention. The various single points of access in a process
+> have to be serialized for multiple threads. heap allocation,
+> deallocation, etc all have to be managed. In a multple process model,
+> these resources would be separated by process contexts.
+>
+> (5) Lastly, why bother? Seriously? Process creation time is an issue
+> true, but its an issue with threads as well, just not as bad. Anyone who
+> is looking for performance should be using a connection pooling
+> mechanism as is done in things like PHP.
+>
+> I have done both threaded and process servers. The threaded servers are
+> easier to write. The process based severs are more robust. From an
+> operational point of view, a "select foo from bar where x > y" will take
+> he same amount of time.
+>
+>
+>
+>
+> ---------------------------(end of broadcast)---------------------------
+> TIP 6: Have you searched our list archives?
+>
+> http://archives.postgresql.org
+>
+
+
+---------------------------(end of broadcast)---------------------------
+TIP 3: if posting/reading through Usenet, please send an appropriate
+subscribe-nomail command to majordomo@postgresql.org so that your
+message can get through to the mailing list cleanly
+
+From pgsql-hackers-owner+M33723@postgresql.org Sat Jan  4 13:21:52 2003
+Return-path: <pgsql-hackers-owner+M33723@postgresql.org>
+Received: from postgresql.org (postgresql.org [64.49.215.8])
+       by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id h04ILpl25640
+       for <pgman@candle.pha.pa.us>; Sat, 4 Jan 2003 13:21:51 -0500 (EST)
+Received: from localhost (postgresql.org [64.49.215.8])
+       by postgresql.org (Postfix) with ESMTP
+       id A5E5D4764F0; Sat,  4 Jan 2003 13:21:50 -0500 (EST)
+Received: from postgresql.org (postgresql.org [64.49.215.8])
+       by postgresql.org (Postfix) with SMTP
+       id B8D94476021; Sat,  4 Jan 2003 13:21:37 -0500 (EST)
+Received: from localhost (postgresql.org [64.49.215.8])
+       by postgresql.org (Postfix) with ESMTP id 7FDFE475CE7
+       for <pgsql-hackers@postgresql.org>; Sat,  4 Jan 2003 13:21:28 -0500 (EST)
+Received: from CopelandConsulting.Net (dsl-24293-ld.customer.centurytel.net [209.142.135.135])
+       by postgresql.org (Postfix) with ESMTP id 71C47474E42
+       for <pgsql-hackers@postgresql.org>; Sat,  4 Jan 2003 13:21:27 -0500 (EST)
+Received: from [192.168.1.2] (mouse.copelandconsulting.net [192.168.1.2])
+       by CopelandConsulting.Net (8.10.1/8.10.1) with ESMTP id h04ILF721061;
+       Sat, 4 Jan 2003 12:21:15 -0600 (CST)
+X-Trade-Id: <CCC.Sat, 4 Jan 2003 12:21:15 -0600 (CST).Sat, 4 Jan 2003 12:21:15 -0600 (CST).200301041821.h04ILF721061.h04ILF721061@CopelandConsulting.Net.
+Subject: Re: [HACKERS] Threads
+From: Greg Copeland <greg@CopelandConsulting.Net>
+To: kar@kakidata.dk
+cc: PGHackers <pgsql-hackers@postgresql.org>
+In-Reply-To: <200301041359.35715.kar@kakidata.dk>
+References:  <D90A5A6C612A39408103E6ECDD77B829408A20@voyager.corporate.connx.com>
+  <23763.1041644042@sss.pgh.pa.us>
+  <1041646276.15927.202.camel@mouse.copelandconsulting.net>
+  <200301041359.35715.kar@kakidata.dk>
+Content-Type: text/plain
+Organization: Copeland Computer Consulting
+Message-ID: <1041704480.15927.224.camel@mouse.copelandconsulting.net>
+MIME-Version: 1.0
+X-Mailer: Ximian Evolution 1.2.0 
+Date: 04 Jan 2003 12:21:20 -0600
+Content-Transfer-Encoding: 7bit
+X-Virus-Scanned: by AMaViS new-20020517
+Precedence: bulk
+Sender: pgsql-hackers-owner@postgresql.org
+X-Virus-Scanned: by AMaViS new-20020517
+Status: OR
+
+On Sat, 2003-01-04 at 06:59, Kaare Rasmussen wrote:
+> > Umm.  No.  User or system level threads, the statement is true.  If a
+> > thread kills over, the process goes with it.  Furthermore, on Win32
+> 
+> Hm. This is a database system. If one of the backend processes dies 
+> unexpectedly, I'm not sure I would trust the consistency and state of the 
+> others.
+> 
+> Or maybe I'm just being chicken.
+
+I'd call that being wise.  That's the problem with using threads. 
+Should a thread do something naughty, the state of the entire process is
+in question.  This is true regardless if it is a user mode, kernel mode,
+or hybrid thread implementation.  That's the power of using the process
+model that is currently in use.  Should it do something naughty, we
+bitch and complain politely, throw our hands in the air and exit.  We no
+longer have to worry about the state and validity of that backend.  This
+creates a huge systemic reliability surplus.
+
+This is also why the concept of a hybrid thread/process implementation
+keeps coming to the surface on the list.  If you maintain the process
+model and only use threads for things that ONLY relate to the single
+process (single session/connection), should a thread cause a problem,
+you can still throw you hands in the air and exit just as is done now
+without causing problems for, or questioning the validity of, other
+backends.
+
+The cool thing about such a concept is that it still opens the door for
+things like parallel sorts and queries as it relates to a single
+backend.
+
+
+-- 
+Greg Copeland <greg@copelandconsulting.net>
+Copeland Computer Consulting
+
+
+---------------------------(end of broadcast)---------------------------
+TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org
+
+From pgsql-hackers-owner+M33819@postgresql.org Mon Jan  6 02:41:01 2003
+Return-path: <pgsql-hackers-owner+M33819@postgresql.org>
+Received: from postgresql.org (postgresql.org [64.49.215.8])
+       by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id h067exi23864
+       for <pgman@candle.pha.pa.us>; Mon, 6 Jan 2003 02:40:59 -0500 (EST)
+Received: from localhost (postgresql.org [64.49.215.8])
+       by postgresql.org (Postfix) with ESMTP
+       id CCD564763B7; Mon,  6 Jan 2003 02:40:56 -0500 (EST)
+Received: from postgresql.org (postgresql.org [64.49.215.8])
+       by postgresql.org (Postfix) with SMTP
+       id 4A6574762E0; Mon,  6 Jan 2003 02:40:54 -0500 (EST)
+Received: from localhost (postgresql.org [64.49.215.8])
+       by postgresql.org (Postfix) with ESMTP id 2C31947606A
+       for <pgsql-hackers@postgresql.org>; Mon,  6 Jan 2003 02:40:50 -0500 (EST)
+Received: from datafix.CS.Berkeley.EDU (datafix.CS.Berkeley.EDU [128.32.37.185])
+       by postgresql.org (Postfix) with ESMTP id 8D7AF47603D
+       for <pgsql-hackers@postgresql.org>; Mon,  6 Jan 2003 02:40:49 -0500 (EST)
+Received: (from sailesh@localhost)
+       by datafix.CS.Berkeley.EDU (8.11.6/8.11.6) id h067ac532006;
+       Sun, 5 Jan 2003 23:36:38 -0800
+X-Authentication-Warning: datafix.CS.Berkeley.EDU: sailesh set sender to sailesh@cs.berkeley.edu using -f
+Reply-To: sailesh@cs.berkeley.edu
+X-URL: http://www.cs.berkeley.edu/~sailesh
+X-Attribution: Sailesh
+To: Shridhar Daithankar <shridhar_daithankar@persistent.co.in>
+cc: PGHackers <pgsql-hackers@postgresql.org>
+Subject: Re: [HACKERS] Threads
+References: <200301032054.11125.shridhar_daithankar@persistent.co.in>
+       <3E1605B8.5060403@priefert.com>
+       <200301061202.43247.shridhar_daithankar@persistent.co.in>
+From: Sailesh Krishnamurthy <sailesh@cs.berkeley.edu>
+Date: 05 Jan 2003 23:36:38 -0800
+In-Reply-To: <200301061202.43247.shridhar_daithankar@persistent.co.in>
+Message-ID: <m3znqeivax.fsf@datafix.CS.Berkeley.EDU>
+Lines: 50
+User-Agent: Gnus/5.0808 (Gnus v5.8.8) XEmacs/21.1 (Cuyahoga Valley)
+MIME-Version: 1.0
+Content-Type: text/plain; charset=us-ascii
+X-Virus-Scanned: by AMaViS new-20020517
+Precedence: bulk
+Sender: pgsql-hackers-owner@postgresql.org
+X-Virus-Scanned: by AMaViS new-20020517
+Status: OR
+
+>>>>> "Shridhar" == Shridhar Daithankar <shridhar_daithankar@persistent.co.in> writes:
+
+    Shridhar> On Saturday 04 January 2003 03:20 am, you wrote:
+    >> >I am sure, many of you would like to delete this message
+    >> before reading, > hold on. :-)
+    >> 
+    >> I'm afraid most posters did not read the message.  Those who
+    >> replied
+    >> 
+    >> "Why bother?" did not address your challenge:
+
+    Shridhar> Our challenges may be..;-)
+
+Not having threading does reduce some of the freedom we've been having
+in our work. But then we have ripped the process model a fair bit and
+we have the freedom of an entirely new process to deal with data
+streams entering the system and we're experimenting with threading for
+asynchronous I/O there.
+
+However, in general I agree with the spirit of the previous messages
+in this thread that threading isn't the main issue for PG.
+
+One thing that I missed so far in the threading thread. Context
+switches are (IMHO) far cheaper between threads, because you save TLB
+flushes. Whether this makes a real difference in a data intensive
+application, I don't know. I wonder how easy it is to measure the x86
+counters to see TLB flushes/misses.
+
+In a database system, even if one process dies, I'd be very chary of
+trusting it. So I am not too swayed by the fact that a
+process-per-connection gets you better isolation. 
+
+BTW, many commercial database systems also use per-process models on
+Unix. However they are very aggressive with connection sharing and
+reuse - even to the point of reusing the same process for multiple
+active connections .. maybe at transaction boundaries. Good when a
+connection is maintained for a long duaration with short-lived
+transactions separated by fair amouns of time. 
+
+Moreover, in db2 for instance, the same code base is used for both
+per-thread and per-process models - in other words, the entire code is
+MT-safe, and the scheduling mechanism is treated as a policy (Win32 is
+MT, and some Unices MP). AFAICT though, postgres code, such as perhaps
+the memory contexts is not MT-safe (of course the bufferpool/shmem
+accesses are safe). 
+
+-- 
+Pip-pip
+Sailesh
+http://www.cs.berkeley.edu/~sailesh
+
+---------------------------(end of broadcast)---------------------------
+TIP 6: Have you searched our list archives?
+
+http://archives.postgresql.org
+
+From pgsql-hackers-owner+M33822@postgresql.org Mon Jan  6 06:23:29 2003
+Return-path: <pgsql-hackers-owner+M33822@postgresql.org>
+Received: from postgresql.org (postgresql.org [64.49.215.8])
+       by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id h06BNSi17987
+       for <pgman@candle.pha.pa.us>; Mon, 6 Jan 2003 06:23:28 -0500 (EST)
+Received: from localhost (postgresql.org [64.49.215.8])
+       by postgresql.org (Postfix) with ESMTP
+       id A1204476260; Mon,  6 Jan 2003 06:23:21 -0500 (EST)
+Received: from postgresql.org (postgresql.org [64.49.215.8])
+       by postgresql.org (Postfix) with SMTP
+       id 0B78D476060; Mon,  6 Jan 2003 06:23:19 -0500 (EST)
+Received: from localhost (postgresql.org [64.49.215.8])
+       by postgresql.org (Postfix) with ESMTP id 50277475BA0
+       for <pgsql-hackers@postgresql.org>; Mon,  6 Jan 2003 06:23:14 -0500 (EST)
+Received: from mail.gne.de (mail.gne.de [213.83.0.2])
+       by postgresql.org (Postfix) with ESMTP id 27B244758E6
+       for <pgsql-hackers@postgresql.org>; Mon,  6 Jan 2003 06:23:13 -0500 (EST)
+Received: from DO5GNE-MTA by mail.gne.de
+       with Novell_GroupWise; Mon, 06 Jan 2003 12:23:02 +0100
+Message-ID: <se197526.086@mail.gne.de>
+X-Mailer: Novell GroupWise Internet Agent 6.0.2
+Date: Mon, 06 Jan 2003 12:22:57 +0100
+From: "Ulrich Neumann" <U_Neumann@gne.de>
+To: "<PGHackers" <pgsql-hackers@postgresql.org>
+Subject: Re: [HACKERS] Threads
+MIME-Version: 1.0
+Content-Type: text/plain; charset=US-ASCII
+Content-Transfer-Encoding: 7bit
+Content-Disposition: inline
+X-Guinevere: 1.1.14 ; GNE Grebe Neumann Gl
+X-Virus-Scanned: by AMaViS new-20020517
+Precedence: bulk
+Sender: pgsql-hackers-owner@postgresql.org
+X-Virus-Scanned: by AMaViS new-20020517
+Status: OR
+
+Hello all,
+
+it's very interesting to see the discussion of "threads" again.
+
+I've portet PostgreSQL to a "thread-per-connection" model based on
+pthreads
+and it is functional. Most of the work was finding all the static
+globals in the sourcefiles
+and swapping them between threads and freeing memory if a thread
+terminates.
+(PostgreSQL isn't written very clean in the aspects of memory
+handling).
+
+My version of the thread-based PostgreSQL is not very efficient at the
+moment because
+I haven't done any optimisation of the code to better support threads
+and I'm using just a
+simple semaphore to control switching of data but this could be a
+starting point for
+others who want to see this code. If this direction will be taken
+seriously I'm very willing
+to help.
+
+If someone is interested in the code I can send a zip file to everyone
+who wants.
+
+Ulrich
+----------------------------------
+  This e-mail is virus scanned
+  Diese e-mail ist virusgeprueft
+
+
+---------------------------(end of broadcast)---------------------------
+TIP 5: Have you checked our extensive FAQ?
+
+http://www.postgresql.org/users-lounge/docs/faq.html
+
+From pgsql-hackers-owner+M33824@postgresql.org Mon Jan  6 07:49:46 2003
+Return-path: <pgsql-hackers-owner+M33824@postgresql.org>
+Received: from postgresql.org (postgresql.org [64.49.215.8])
+       by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id h06Cnii03541
+       for <pgman@candle.pha.pa.us>; Mon, 6 Jan 2003 07:49:44 -0500 (EST)
+Received: from localhost (postgresql.org [64.49.215.8])
+       by postgresql.org (Postfix) with ESMTP
+       id C409E476778; Mon,  6 Jan 2003 07:49:36 -0500 (EST)
+Received: from postgresql.org (postgresql.org [64.49.215.8])
+       by postgresql.org (Postfix) with SMTP
+       id 617C04768C8; Mon,  6 Jan 2003 07:49:01 -0500 (EST)
+Received: from localhost (postgresql.org [64.49.215.8])
+       by postgresql.org (Postfix) with ESMTP id EA9284768AA
+       for <pgsql-hackers@postgresql.org>; Mon,  6 Jan 2003 07:48:56 -0500 (EST)
+Received: from CopelandConsulting.Net (dsl-24293-ld.customer.centurytel.net [209.142.135.135])
+       by postgresql.org (Postfix) with ESMTP id 2DB74476191
+       for <pgsql-hackers@postgresql.org>; Mon,  6 Jan 2003 07:48:41 -0500 (EST)
+Received: from [192.168.1.2] (mouse.copelandconsulting.net [192.168.1.2])
+       by CopelandConsulting.Net (8.10.1/8.10.1) with ESMTP id h06CmL702059;
+       Mon, 6 Jan 2003 06:48:21 -0600 (CST)
+X-Trade-Id: <CCC.Mon, 6 Jan 2003 06:48:21 -0600 (CST).Mon, 6 Jan 2003 06:48:21 -0600 (CST).200301061248.h06CmL702059.h06CmL702059@CopelandConsulting.Net.
+Subject: Re: [HACKERS] Threads
+From: Greg Copeland <greg@CopelandConsulting.Net>
+To: shridhar_daithankar@persistent.co.in
+cc: "<PGHackers" <pgsql-hackers@postgresql.org>
+In-Reply-To: <3E19B78B.25689.15BFFE@localhost>
+References: <3E19B78B.25689.15BFFE@localhost>
+Content-Type: text/plain
+Organization: Copeland Computer Consulting
+Message-ID: <1041857302.17321.49.camel@mouse.copelandconsulting.net>
+MIME-Version: 1.0
+X-Mailer: Ximian Evolution 1.2.0 
+Date: 06 Jan 2003 06:48:23 -0600
+Content-Transfer-Encoding: 7bit
+X-Virus-Scanned: by AMaViS new-20020517
+Precedence: bulk
+Sender: pgsql-hackers-owner@postgresql.org
+X-Virus-Scanned: by AMaViS new-20020517
+Status: OR
+
+On Mon, 2003-01-06 at 05:36, Shridhar Daithankar wrote:
+> On 6 Jan 2003 at 12:22, Ulrich Neumann wrote:
+> 
+> > Hello all,
+> > If someone is interested in the code I can send a zip file to everyone
+> > who wants.
+> 
+> I suggest you preserver your work. The reason I suggested thread are mainly two 
+> folds.
+> 
+> 1) Get I/O time used fuitfully
+
+
+AIO may address this without the need for integrated threading. 
+Arguably, from the long thread that last appeared on the topic of AIO,
+some hold that AIO doesn't even offer anything beyond the current
+implementation.  As such, it's highly doubtful that integrated threading
+is going to offer anything beyond what a sound AIO implementation can
+achieve.
+
+
+> 2) Use multiple CPU better.
+> 
+
+
+Multiple processes tend to universally support multiple CPUs better than
+does threading.  On some platforms, the level of threading support is
+currently only user mode implementations which means no additional CPU
+use.  Furthermore, some platforms where user-mode threads are defacto,
+they don't even allow for scheduling bias resulting is less work being
+accomplished within the same time interval (work slice must be divided
+between n-threads within the process, all of which run on a single CPU).
+
+
+> It will not require as much code cleaning as your efforts might had. However 
+> your work will be very useful if somebody decides to use thread in any fashion 
+> in core postgresql.
+> 
+> I was hoping for bit more optimistic response given that what I suggested was 
+> totally optional at any point of time but very important from performance 
+> point. Besides the change would have been gradual as required..
+> 
+
+
+Speaking for my self, I probably would of been more excited if the
+offered framework had addressed several issues.  The short list is:
+
+o Code needs to be more robust.  It shouldn't be calling exit directly
+as, I believe, it should be allowing for PostgreSQL to clean up some. 
+Correct me as needed.  I would of also expected the code of adopted
+PostgreSQL's semantics and mechanisms as needed (error reporting, etc). 
+I do understand it was an initial attempt to simply get something in
+front of some eyes and have something to talk about.  Just the same, I
+was expecting something that we could actually pull the trigger with.
+
+o Code isn't very portable.  Looked fairly okay for pthread platforms,
+however, there is new emphasis on the Win32 platform.  I think it would
+be a mistake to introduce something as significant as threading without
+addressing Win32 from the get-go.
+
+o I would desire a more highly abstracted/portable interface which
+allows for different threading and synchronization primitives to be
+used.  Current implementation is tightly coupled to pthreads. 
+Furthermore, on platforms such as Solaris, I would hope it would easily
+allow for plugging in its native threading primitives which are touted
+to be much more efficient than pthreads on said platform.
+
+o Code is not commented.  I would hope that adding new code for
+something as important as threading would be commented.
+
+o Code is fairly trivial and does not address other primitives
+(semaphores, mutexs, conditions, TSS, etc) portably which would be
+required for anything but the most trivial of threaded work.  This is
+especially true in such an application where data IS the application. 
+As such, you must reasonably assume that threads need some form of
+portable serialization primitives, not to mention mechanisms for
+non-trivial communication.
+
+o Does not address issues such as thread signaling or status reporting.
+
+o Pool interface is rather simplistic.  Does not currently support
+concepts such as wake pool, stop pool, pool status, assigning a pool to
+work, etc.  In fact, it's not altogether obvious what the capabilities
+intent is of the current pool implementation.
+
+o Doesn't seem to address any form of thread communication facilities
+(mailboxes, queues, etc).
+
+
+There are probably other things that I can find if I spend more than
+just a couple of minutes looking at the code.  Honestly, I love threads
+but I can see that the current code offering is not much more than a
+token in its current form.  No offense meant.
+
+After it's all said and done, I'd have to see a lot more meat before I'd
+be convinced that threading is ready for PostgreSQL; from both a social
+and technological perspective.
+
+
+Regards,
+
+-- 
+Greg Copeland <greg@copelandconsulting.net>
+Copeland Computer Consulting
+
+
+---------------------------(end of broadcast)---------------------------
+TIP 2: you can get off all lists at once with the unregister command
+    (send "unregister YourEmailAddressHere" to majordomo@postgresql.org)
+
+From pgsql-hackers-owner+M33899@postgresql.org Tue Jan  7 03:00:25 2003
+Return-path: <pgsql-hackers-owner+M33899@postgresql.org>
+Received: from postgresql.org (postgresql.org [64.49.215.8])
+       by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id h0780Mi00624
+       for <pgman@candle.pha.pa.us>; Tue, 7 Jan 2003 03:00:23 -0500 (EST)
+Received: from localhost (postgresql.org [64.49.215.8])
+       by postgresql.org (Postfix) with ESMTP
+       id 46FA747687C; Tue,  7 Jan 2003 03:00:21 -0500 (EST)
+Received: from postgresql.org (postgresql.org [64.49.215.8])
+       by postgresql.org (Postfix) with SMTP
+       id 69717475F25; Tue,  7 Jan 2003 03:00:13 -0500 (EST)
+Received: from localhost (postgresql.org [64.49.215.8])
+       by postgresql.org (Postfix) with ESMTP id 5323E475F39
+       for <pgsql-hackers@postgresql.org>; Tue,  7 Jan 2003 03:00:01 -0500 (EST)
+Received: from www.pspl.co.in (www.pspl.co.in [202.54.11.65])
+       by postgresql.org (Postfix) with ESMTP id 351DD475EE1
+       for <pgsql-hackers@postgresql.org>; Tue,  7 Jan 2003 02:59:58 -0500 (EST)
+Received: (from root@localhost)
+       by www.pspl.co.in (8.11.6/8.11.6) id h077xvs03265
+       for <pgsql-hackers@postgresql.org>; Tue, 7 Jan 2003 13:29:57 +0530
+Received: from daithan (daithan.intranet.pspl.co.in [192.168.7.161])
+       by www.pspl.co.in (8.11.6/8.11.0) with ESMTP id h077xvr03260
+       for <pgsql-hackers@postgresql.org>; Tue, 7 Jan 2003 13:29:57 +0530
+From: "Shridhar Daithankar" <shridhar_daithankar@persistent.co.in>
+To: "<PGHackers" <pgsql-hackers@postgresql.org>
+Date: Tue, 07 Jan 2003 13:30:05 +0530
+MIME-Version: 1.0
+Subject: Re: [HACKERS] Threads
+Reply-To: shridhar_daithankar@persistent.co.in
+Message-ID: <3E1AD65D.10112.192793@localhost>
+References: <3E19B78B.25689.15BFFE@localhost>
+In-Reply-To: <1041857302.17321.49.camel@mouse.copelandconsulting.net>
+X-Mailer: Pegasus Mail for Windows (v4.02)
+Content-Type: text/plain; charset=US-ASCII
+Content-Transfer-Encoding: 7BIT
+Content-Description: Mail message body
+X-Virus-Scanned: by AMaViS new-20020517
+Precedence: bulk
+Sender: pgsql-hackers-owner@postgresql.org
+X-Virus-Scanned: by AMaViS new-20020517
+Status: OR
+
+On 6 Jan 2003 at 6:48, Greg Copeland wrote:
+> > 1) Get I/O time used fuitfully
+> AIO may address this without the need for integrated threading. 
+> Arguably, from the long thread that last appeared on the topic of AIO,
+> some hold that AIO doesn't even offer anything beyond the current
+> implementation.  As such, it's highly doubtful that integrated threading
+> is going to offer anything beyond what a sound AIO implementation can
+> achieve.
+
+Either way, a complete aio or threading implementation is not available on 
+major platforms that postgresql runs. Linux definitely does not have one, last 
+I checked.
+
+If postgresql is not using aio or threading, we should start using one of them, 
+is what I feel. What do you say?
+
+> > 2) Use multiple CPU better.
+> Multiple processes tend to universally support multiple CPUs better than
+> does threading.  On some platforms, the level of threading support is
+> currently only user mode implementations which means no additional CPU
+> use.  Furthermore, some platforms where user-mode threads are defacto,
+> they don't even allow for scheduling bias resulting is less work being
+> accomplished within the same time interval (work slice must be divided
+> between n-threads within the process, all of which run on a single CPU).
+
+The frame-work I have posted, threading is optional at build and should be a 
+configuration option if it gets integrated. So for the platforms that can not 
+spread threads across multiple CPUs, it can simply be turned off..
+
+> Speaking for my self, I probably would of been more excited if the
+> offered framework had addressed several issues.  The short list is:
+> 
+> o Code needs to be more robust.  It shouldn't be calling exit directly
+> as, I believe, it should be allowing for PostgreSQL to clean up some. 
+> Correct me as needed.  I would of also expected the code of adopted
+> PostgreSQL's semantics and mechanisms as needed (error reporting, etc). 
+> I do understand it was an initial attempt to simply get something in
+> front of some eyes and have something to talk about.  Just the same, I
+> was expecting something that we could actually pull the trigger with.
+
+That could be done.
+
+> 
+> o Code isn't very portable.  Looked fairly okay for pthread platforms,
+> however, there is new emphasis on the Win32 platform.  I think it would
+> be a mistake to introduce something as significant as threading without
+> addressing Win32 from the get-go.
+
+If you search for "pthread" in thread.c, there are not many instances. Same 
+goes for thread.h. From what I understand windows threading, it would be less 
+than 10 minutes job to #ifdef the pthread related part on either file.
+
+It is just that I have not played with windows threading and nor I am inclined 
+to...;-)
+
+> 
+> o I would desire a more highly abstracted/portable interface which
+> allows for different threading and synchronization primitives to be
+> used.  Current implementation is tightly coupled to pthreads. 
+> Furthermore, on platforms such as Solaris, I would hope it would easily
+> allow for plugging in its native threading primitives which are touted
+> to be much more efficient than pthreads on said platform.
+
+Same as above. If there can be two cases separated with #ifdef, there can be 
+more.. But what is important is to have a thread that can be woken up as and 
+when required with any function desired. That is the basic idea.
+
+> o Code is not commented.  I would hope that adding new code for
+> something as important as threading would be commented.
+
+Agreed. 
+> o Code is fairly trivial and does not address other primitives
+> (semaphores, mutexs, conditions, TSS, etc) portably which would be
+> required for anything but the most trivial of threaded work.  This is
+> especially true in such an application where data IS the application. 
+> As such, you must reasonably assume that threads need some form of
+> portable serialization primitives, not to mention mechanisms for
+> non-trivial communication.
+
+I don't get this. Probably I should post a working example. It is not threads 
+responsibility to make a function thread safe which is changed on the fly. The 
+function has to make sure that it is thread safe. That is altogether different 
+effort..
+> o Does not address issues such as thread signaling or status reporting.
+
+>From what I learnt from pthreads on linux, I would not mix threads and signals. 
+One can easily add code in runner function that disables any signals for thread 
+while the thread starts running. This would leave original signal handling 
+mechanism in place.
+
+As far as status reporting is concerned, the thread sould be initiated while 
+back-end starts and terminated with backend termination. What is about status 
+reporting?
+> o Pool interface is rather simplistic.  Does not currently support
+> concepts such as wake pool, stop pool, pool status, assigning a pool to
+> work, etc.  In fact, it's not altogether obvious what the capabilities
+> intent is of the current pool implementation.
+
+Could you please elaborate? I am using same interface in c++ for a server 
+application and never faced a problem like that..;-)
+
+> o Doesn't seem to address any form of thread communication facilities
+> (mailboxes, queues, etc).
+
+Not part of this abstraction of threading mechanism. Intentionally left out to 
+keep things clean.
+
+> There are probably other things that I can find if I spend more than
+> just a couple of minutes looking at the code.  Honestly, I love threads
+> but I can see that the current code offering is not much more than a
+> token in its current form.  No offense meant.
+
+None taken. Point is it is useful and that is enough for me. If you could 
+elaborate examples for any problems you see, I can probably modify it. (Code 
+documentation is what I will do now)
+
+> After it's all said and done, I'd have to see a lot more meat before I'd
+> be convinced that threading is ready for PostgreSQL; from both a social
+> and technological perspective.
+
+Tell me about it..
+
+Bye
+ Shridhar
+
+--
+What's this script do?    unzip ; touch ; finger ; mount ; gasp ; yes ; umount 
+; sleepHint for the answer: not everything is computer-oriented. Sometimes 
+you'rein a sleeping bag, camping out.(Contributed by Frans van der Zande.)
+
+
+---------------------------(end of broadcast)---------------------------
+TIP 4: Don't 'kill -9' the postmaster
+
+From pgsql-hackers-owner+M33921@postgresql.org Tue Jan  7 11:10:53 2003
+Return-path: <pgsql-hackers-owner+M33921@postgresql.org>
+Received: from postgresql.org (postgresql.org [64.49.215.8])
+       by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id h07GApX13277
+       for <pgman@candle.pha.pa.us>; Tue, 7 Jan 2003 11:10:51 -0500 (EST)
+Received: from localhost (postgresql.org [64.49.215.8])
+       by postgresql.org (Postfix) with ESMTP
+       id 5BDC0477200; Tue,  7 Jan 2003 11:06:58 -0500 (EST)
+Received: from postgresql.org (postgresql.org [64.49.215.8])
+       by postgresql.org (Postfix) with SMTP
+       id 9EE41477268; Tue,  7 Jan 2003 11:06:40 -0500 (EST)
+Received: from localhost (postgresql.org [64.49.215.8])
+       by postgresql.org (Postfix) with ESMTP id ACEA5477260
+       for <pgsql-hackers@postgresql.org>; Tue,  7 Jan 2003 11:06:35 -0500 (EST)
+Received: from CopelandConsulting.Net (dsl-24293-ld.customer.centurytel.net [209.142.135.135])
+       by postgresql.org (Postfix) with ESMTP id 78B51477165
+       for <pgsql-hackers@postgresql.org>; Tue,  7 Jan 2003 11:06:28 -0500 (EST)
+Received: from [192.168.1.2] (mouse.copelandconsulting.net [192.168.1.2])
+       by CopelandConsulting.Net (8.10.1/8.10.1) with ESMTP id h07G68711510;
+       Tue, 7 Jan 2003 10:06:09 -0600 (CST)
+X-Trade-Id: <CCC.Tue, 7 Jan 2003 10:06:09 -0600 (CST).Tue, 7 Jan 2003 10:06:09 -0600 (CST).200301071606.h07G68711510.h07G68711510@CopelandConsulting.Net.
+Subject: Re: [HACKERS] Threads
+From: Greg Copeland <greg@CopelandConsulting.Net>
+To: shridhar_daithankar@persistent.co.in
+cc: "<PGHackers" <pgsql-hackers@postgresql.org>
+In-Reply-To: <3E1AD65D.10112.192793@localhost>
+References: <3E19B78B.25689.15BFFE@localhost>
+  <3E1AD65D.10112.192793@localhost>
+Content-Type: text/plain
+Organization: Copeland Computer Consulting
+Message-ID: <1041955572.17639.148.camel@mouse.copelandconsulting.net>
+MIME-Version: 1.0
+X-Mailer: Ximian Evolution 1.2.0 
+Date: 07 Jan 2003 10:06:12 -0600
+Content-Transfer-Encoding: 7bit
+X-Virus-Scanned: by AMaViS new-20020517
+Precedence: bulk
+Sender: pgsql-hackers-owner@postgresql.org
+X-Virus-Scanned: by AMaViS new-20020517
+Status: OR
+
+On Tue, 2003-01-07 at 02:00, Shridhar Daithankar wrote:
+> On 6 Jan 2003 at 6:48, Greg Copeland wrote:
+> > > 1) Get I/O time used fuitfully
+> > AIO may address this without the need for integrated threading. 
+> > Arguably, from the long thread that last appeared on the topic of AIO,
+> > some hold that AIO doesn't even offer anything beyond the current
+> > implementation.  As such, it's highly doubtful that integrated threading
+> > is going to offer anything beyond what a sound AIO implementation can
+> > achieve.
+> 
+> Either way, a complete aio or threading implementation is not available on 
+> major platforms that postgresql runs. Linux definitely does not have one, last 
+> I checked.
+> 
+
+There are two or three significant AIO implementation efforts currently
+underway for Linux.  One such implementation is available from the Red
+Hat Server Edition (IIRC) and has been available for some time now.  I
+believe Oracle is using it.  SGI also has an effort and I forget where
+the other one comes from.  Nonetheless, I believe it's going to be a
+hard fought battle to get AIO implemented simply because I don't think
+anyone, yet, can truly argue a case on the gain vs effort.
+
+> If postgresql is not using aio or threading, we should start using one of them, 
+> is what I feel. What do you say?
+> 
+
+I did originally say that I'd like to see an AIO implementation.  Then
+again, I don't current have a position to stand other than simply saying
+it *might* perform better.  ;)  Not exactly a position that's going to
+win the masses over.  
+
+> > was expecting something that we could actually pull the trigger with.
+> 
+> That could be done.
+> 
+
+I'm sure it can, but that's probably the easiest item to address.
+
+> > 
+> > o Code isn't very portable.  Looked fairly okay for pthread platforms,
+> > however, there is new emphasis on the Win32 platform.  I think it would
+> > be a mistake to introduce something as significant as threading without
+> > addressing Win32 from the get-go.
+> 
+> If you search for "pthread" in thread.c, there are not many instances. Same 
+> goes for thread.h. From what I understand windows threading, it would be less 
+> than 10 minutes job to #ifdef the pthread related part on either file.
+> 
+> It is just that I have not played with windows threading and nor I am inclined 
+> to...;-)
+> 
+
+Well, the method above is going to create a semi-ugly mess.  I've
+written thread abstraction layers which cover OS/2, NT, and pthreads. 
+Each have subtle distinction.  What really needs to be done is the
+creation of another abstraction layer which your current code would sit
+on top of.  That way, everything contained within is clear and easy to
+read.  The big bonus is that as additional threading implementations
+need to be added, only the "low-level" abstraction stuff needs to
+modified.  Done properly, each thread implementation would be it's own
+module requiring little #if clutter.
+
+As you can see, that's a fair amount of work and far from where the code
+currently is.
+
+> > 
+> > o I would desire a more highly abstracted/portable interface which
+> > allows for different threading and synchronization primitives to be
+> > used.  Current implementation is tightly coupled to pthreads. 
+> > Furthermore, on platforms such as Solaris, I would hope it would easily
+> > allow for plugging in its native threading primitives which are touted
+> > to be much more efficient than pthreads on said platform.
+> 
+> Same as above. If there can be two cases separated with #ifdef, there can be 
+> more.. But what is important is to have a thread that can be woken up as and 
+> when required with any function desired. That is the basic idea.
+> 
+
+Again, there's a lot of work in creating a well formed abstraction layer
+for all of the mechanics that are required.  Furthermore, different
+thread implementations have slightly different semantics which further
+complicates things.  Worse, some types of primitives are simply not
+available with some thread implementations.  That means those platforms
+require it to be written from the primitives that are available on the
+platform.  Yet more work.
+
+
+> > o Code is fairly trivial and does not address other primitives
+> > (semaphores, mutexs, conditions, TSS, etc) portably which would be
+> > required for anything but the most trivial of threaded work.  This is
+> > especially true in such an application where data IS the application. 
+> > As such, you must reasonably assume that threads need some form of
+> > portable serialization primitives, not to mention mechanisms for
+> > non-trivial communication.
+> 
+> I don't get this. Probably I should post a working example. It is not threads 
+> responsibility to make a function thread safe which is changed on the fly. The 
+> function has to make sure that it is thread safe. That is altogether different 
+> effort..
+
+
+You're right, it's not the thread's responsibility, however, it is the
+threading toolkit's.  In this case, you're offering to be the toolkit
+which functions across two platforms, just for starters.  Reasonably,
+you should expect a third to quickly follow.
+
+>  
+> > o Does not address issues such as thread signaling or status reporting.
+> 
+> >From what I learnt from pthreads on linux, I would not mix threads and signals. 
+> One can easily add code in runner function that disables any signals for thread 
+> while the thread starts running. This would leave original signal handling 
+> mechanism in place.
+> 
+> As far as status reporting is concerned, the thread sould be initiated while 
+> back-end starts and terminated with backend termination. What is about status 
+> reporting?
+>  
+> > o Pool interface is rather simplistic.  Does not currently support
+> > concepts such as wake pool, stop pool, pool status, assigning a pool to
+> > work, etc.  In fact, it's not altogether obvious what the capabilities
+> > intent is of the current pool implementation.
+> 
+> Could you please elaborate? I am using same interface in c++ for a server 
+> application and never faced a problem like that..;-)
+> 
+>  
+> > o Doesn't seem to address any form of thread communication facilities
+> > (mailboxes, queues, etc).
+> 
+> Not part of this abstraction of threading mechanism. Intentionally left out to 
+> keep things clean.
+> 
+> > There are probably other things that I can find if I spend more than
+> > just a couple of minutes looking at the code.  Honestly, I love threads
+> > but I can see that the current code offering is not much more than a
+> > token in its current form.  No offense meant.
+> 
+> None taken. Point is it is useful and that is enough for me. If you could 
+> elaborate examples for any problems you see, I can probably modify it. (Code 
+> documentation is what I will do now)
+> 
+> > After it's all said and done, I'd have to see a lot more meat before I'd
+> > be convinced that threading is ready for PostgreSQL; from both a social
+> > and technological perspective.
+> 
+> Tell me about it..
+> 
+
+Long story short, if PostgreSQL is to use threads, it shouldn't be
+handicapped by having a very limited subset of functionality.  With the
+code that has been currently submitted, I don't believe you could even 
+effectively implement a parallel sort.
+
+To get an idea of the types of things that would be needed, check out
+the ACE Toolkit.  There are a couple of other fairly popular toolkits as
+well.  Nonetheless, it's a significant effort and the current code is a
+long ways off from being usable.
+
+
+-- 
+Greg Copeland <greg@copelandconsulting.net>
+Copeland Computer Consulting
+
+
+---------------------------(end of broadcast)---------------------------
+TIP 5: Have you checked our extensive FAQ?
+
+http://www.postgresql.org/users-lounge/docs/faq.html
+
+From pgsql-hackers-owner+M33944@postgresql.org Tue Jan  7 13:22:04 2003
+Return-path: <pgsql-hackers-owner+M33944@postgresql.org>
+Received: from postgresql.org (postgresql.org [64.49.215.8])
+       by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id h07IM2X05350
+       for <pgman@candle.pha.pa.us>; Tue, 7 Jan 2003 13:22:02 -0500 (EST)
+Received: from localhost (postgresql.org [64.49.215.8])
+       by postgresql.org (Postfix) with ESMTP
+       id 544EF476AC1; Tue,  7 Jan 2003 13:22:05 -0500 (EST)
+Received: from postgresql.org (postgresql.org [64.49.215.8])
+       by postgresql.org (Postfix) with SMTP
+       id 341134761E8; Tue,  7 Jan 2003 13:21:55 -0500 (EST)
+Received: from localhost (postgresql.org [64.49.215.8])
+       by postgresql.org (Postfix) with ESMTP id 48974475ADE
+       for <pgsql-hackers@postgresql.org>; Tue,  7 Jan 2003 13:21:50 -0500 (EST)
+Received: from sabre.velocet.net (sabre.velocet.net [216.138.209.205])
+       by postgresql.org (Postfix) with ESMTP id B8D40475AD7
+       for <pgsql-hackers@postgresql.org>; Tue,  7 Jan 2003 13:21:49 -0500 (EST)
+Received: from stark.dyndns.tv (H162.C233.tor.velocet.net [216.138.233.162])
+       by sabre.velocet.net (Postfix) with ESMTP
+       id 887681382B9; Tue,  7 Jan 2003 13:21:48 -0500 (EST)
+Received: from localhost
+       ([127.0.0.1] helo=stark.dyndns.tv ident=foobar)
+       by stark.dyndns.tv with smtp (Exim 3.36 #1 (Debian))
+       id 18VyMF-0002zN-00; Tue, 07 Jan 2003 13:21:47 -0500
+To: Greg Copeland <greg@CopelandConsulting.Net>
+cc: kar@kakidata.dk, PGHackers <pgsql-hackers@postgresql.org>
+Subject: Re: [HACKERS] Threads
+References: <D90A5A6C612A39408103E6ECDD77B829408A20@voyager.corporate.connx.com>
+       <23763.1041644042@sss.pgh.pa.us>
+       <1041646276.15927.202.camel@mouse.copelandconsulting.net>
+       <200301041359.35715.kar@kakidata.dk>
+       <1041704480.15927.224.camel@mouse.copelandconsulting.net>
+In-Reply-To: <1041704480.15927.224.camel@mouse.copelandconsulting.net>
+From: Greg Stark <gsstark@mit.edu>
+Organization: The Emacs Conspiracy; member since 1992
+Date: 07 Jan 2003 13:21:47 -0500
+Message-ID: <87isx0izwk.fsf@stark.dyndns.tv>
+Lines: 43
+User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2
+MIME-Version: 1.0
+Content-Type: text/plain; charset=us-ascii
+X-Virus-Scanned: by AMaViS new-20020517
+Precedence: bulk
+Sender: pgsql-hackers-owner@postgresql.org
+X-Virus-Scanned: by AMaViS new-20020517
+Status: OR
+
+
+Greg Copeland <greg@CopelandConsulting.Net> writes:
+
+> That's the power of using the process model that is currently in use. Should
+> it do something naughty, we bitch and complain politely, throw our hands in
+> the air and exit. We no longer have to worry about the state and validity of
+> that backend.
+
+You missed the point of his post. If one process in your database does
+something nasty you damn well should worry about the state of and validity of
+the entire database, not just that one backend.
+
+Are you really sure you caught the problem before it screwed up the data in
+shared memory? On disk?
+
+
+This whole topic is in need of some serious FUD-dispelling and careful
+analysis. Here's a more calm explanation of the situation on this particular
+point. Perhaps I'll follow up with something on IO concurrency later.
+
+The point in consideration here is really memory isolation. Threads by default
+have zero isolation between threads. They can all access each other's memory
+even including their stack. Most of that memory is in fact only needed by a
+single thread. 
+
+Processes by default have complete memory isolation. However postgres actually
+weakens that by doing a lot of work in a shared memory pool. That memory gets
+exactly the same protection as it would get in a threaded model, which is to
+say none.
+
+So the reality is that if you have a bug most likely you've only corrupted the
+local data which can be easily cleaned up either way. In the thread model
+there's also the unlikely but scary risk that you've damaged other threads'
+memory. And in either case there's the possibility that you've damaged the
+shared pool which is unrecoverable.
+
+In theory minimising the one case of corrupting other threads' local data
+shouldn't make a big difference to the risk in the case of an assertion
+failure. I'm not sure in practice if that's true though. Processes probably
+reduce the temptation to do work in the shared area too.
+
+--
+greg
+
+
+---------------------------(end of broadcast)---------------------------
+TIP 2: you can get off all lists at once with the unregister command
+    (send "unregister YourEmailAddressHere" to majordomo@postgresql.org)
+
+From pgsql-hackers-owner+M33945@postgresql.org Tue Jan  7 13:48:12 2003
+Return-path: <pgsql-hackers-owner+M33945@postgresql.org>
+Received: from postgresql.org (postgresql.org [64.49.215.8])
+       by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id h07Im8X15155
+       for <pgman@candle.pha.pa.us>; Tue, 7 Jan 2003 13:48:08 -0500 (EST)
+Received: from localhost (postgresql.org [64.49.215.8])
+       by postgresql.org (Postfix) with ESMTP
+       id BF0454773D3; Tue,  7 Jan 2003 13:43:10 -0500 (EST)
+Received: from postgresql.org (postgresql.org [64.49.215.8])
+       by postgresql.org (Postfix) with SMTP
+       id 781634773A6; Tue,  7 Jan 2003 13:43:03 -0500 (EST)
+Received: from localhost (postgresql.org [64.49.215.8])
+       by postgresql.org (Postfix) with ESMTP id 28074477390
+       for <pgsql-hackers@postgresql.org>; Tue,  7 Jan 2003 13:42:59 -0500 (EST)
+Received: from CopelandConsulting.Net (dsl-24293-ld.customer.centurytel.net [209.142.135.135])
+       by postgresql.org (Postfix) with ESMTP id 1392B476682
+       for <pgsql-hackers@postgresql.org>; Tue,  7 Jan 2003 13:42:42 -0500 (EST)
+Received: from [192.168.1.2] (mouse.copelandconsulting.net [192.168.1.2])
+       by CopelandConsulting.Net (8.10.1/8.10.1) with ESMTP id h07IgS715128;
+       Tue, 7 Jan 2003 12:42:28 -0600 (CST)
+X-Trade-Id: <CCC.Tue, 7 Jan 2003 12:42:28 -0600 (CST).Tue, 7 Jan 2003 12:42:28 -0600 (CST).200301071842.h07IgS715128.h07IgS715128@CopelandConsulting.Net.
+Subject: Re: [HACKERS] Threads
+From: Greg Copeland <greg@CopelandConsulting.Net>
+To: Greg Stark <gsstark@mit.edu>
+cc: kar@kakidata.dk, PGHackers <pgsql-hackers@postgresql.org>
+In-Reply-To: <87isx0izwk.fsf@stark.dyndns.tv>
+References:  <D90A5A6C612A39408103E6ECDD77B829408A20@voyager.corporate.connx.com>
+  <23763.1041644042@sss.pgh.pa.us>
+  <1041646276.15927.202.camel@mouse.copelandconsulting.net>
+  <200301041359.35715.kar@kakidata.dk>
+  <1041704480.15927.224.camel@mouse.copelandconsulting.net>
+  <87isx0izwk.fsf@stark.dyndns.tv>
+Content-Type: text/plain
+Organization: Copeland Computer Consulting
+Message-ID: <1041964952.29180.10.camel@mouse.copelandconsulting.net>
+MIME-Version: 1.0
+X-Mailer: Ximian Evolution 1.2.0 
+Date: 07 Jan 2003 12:42:33 -0600
+Content-Transfer-Encoding: 7bit
+X-Virus-Scanned: by AMaViS new-20020517
+Precedence: bulk
+Sender: pgsql-hackers-owner@postgresql.org
+X-Virus-Scanned: by AMaViS new-20020517
+Status: OR
+
+On Tue, 2003-01-07 at 12:21, Greg Stark wrote:
+> Greg Copeland <greg@CopelandConsulting.Net> writes:
+> 
+> > That's the power of using the process model that is currently in use. Should
+> > it do something naughty, we bitch and complain politely, throw our hands in
+> > the air and exit. We no longer have to worry about the state and validity of
+> > that backend.
+> 
+> You missed the point of his post. If one process in your database does
+> something nasty you damn well should worry about the state of and validity of
+> the entire database, not just that one backend.
+> 
+
+I can assure you I did not miss the point.  No idea why you're
+continuing to spell it out.  In this case, it appears the quotation is
+being taken out of context or it was originally stated in an improper
+context.
+
+> Are you really sure you caught the problem before it screwed up the data in
+> shared memory? On disk?
+> 
+> 
+> This whole topic is in need of some serious FUD-dispelling and careful
+> analysis. Here's a more calm explanation of the situation on this particular
+> point. Perhaps I'll follow up with something on IO concurrency later.
+> 
+
+
+Hmmm.  Not sure what needs to be dispelled since I've not seen any FUD.
+
+
+> The point in consideration here is really memory isolation. Threads by default
+> have zero isolation between threads. They can all access each other's memory
+> even including their stack. Most of that memory is in fact only needed by a
+> single thread. 
+> 
+
+Again, this has been covered already.
+
+
+> Processes by default have complete memory isolation. However postgres actually
+> weakens that by doing a lot of work in a shared memory pool. That memory gets
+> exactly the same protection as it would get in a threaded model, which is to
+> say none.
+> 
+
+Again, this has all been covered, more or less.  You're comments seem to
+imply that you did not fully read what has been said on the topic thus
+far or that you misunderstood something that was said.  Of course, it's
+also possible that I may of said something out of it's proper context
+which may be confusing you.
+
+I think it's safe to say I don't have any further comment unless
+something new is being brought to the table.  Should there be something
+new to cover, I'm happy to talk about it.  At this point, however, it
+appears that it's been beat to death already.
+
+
+-- 
+Greg Copeland <greg@copelandconsulting.net>
+Copeland Computer Consulting
+
+
+---------------------------(end of broadcast)---------------------------
+TIP 3: if posting/reading through Usenet, please send an appropriate
+subscribe-nomail command to majordomo@postgresql.org so that your
+message can get through to the mailing list cleanly
+
+From pgsql-hackers-owner+M33946@postgresql.org Tue Jan  7 14:02:33 2003
+Return-path: <pgsql-hackers-owner+M33946@postgresql.org>
+Received: from postgresql.org (postgresql.org [64.49.215.8])
+       by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id h07J2TX22478
+       for <pgman@candle.pha.pa.us>; Tue, 7 Jan 2003 14:02:30 -0500 (EST)
+Received: from localhost (postgresql.org [64.49.215.8])
+       by postgresql.org (Postfix) with ESMTP
+       id 6A905477204; Tue,  7 Jan 2003 14:02:32 -0500 (EST)
+Received: from postgresql.org (postgresql.org [64.49.215.8])
+       by postgresql.org (Postfix) with SMTP
+       id 3546E476688; Tue,  7 Jan 2003 14:02:21 -0500 (EST)
+Received: from localhost (postgresql.org [64.49.215.8])
+       by postgresql.org (Postfix) with ESMTP id E3CC44760BD
+       for <pgsql-hackers@postgresql.org>; Tue,  7 Jan 2003 14:02:14 -0500 (EST)
+Received: from sss.pgh.pa.us (unknown [192.204.191.242])
+       by postgresql.org (Postfix) with ESMTP id 3D8FA475AD7
+       for <pgsql-hackers@postgresql.org>; Tue,  7 Jan 2003 14:02:14 -0500 (EST)
+Received: from sss2.sss.pgh.pa.us (tgl@localhost [127.0.0.1])
+       by sss.pgh.pa.us (8.12.6/8.12.6) with ESMTP id h07J1s0U019750;
+       Tue, 7 Jan 2003 14:01:54 -0500 (EST)
+To: Greg Stark <gsstark@mit.edu>
+cc: Greg Copeland <greg@CopelandConsulting.Net>, kar@kakidata.dk,
+   PGHackers <pgsql-hackers@postgresql.org>
+Subject: Re: [HACKERS] Threads 
+In-Reply-To: <87isx0izwk.fsf@stark.dyndns.tv> 
+References: <D90A5A6C612A39408103E6ECDD77B829408A20@voyager.corporate.connx.com> <23763.1041644042@sss.pgh.pa.us> <1041646276.15927.202.camel@mouse.copelandconsulting.net> <200301041359.35715.kar@kakidata.dk> <1041704480.15927.224.camel@mouse.copelandconsulting.net> <87isx0izwk.fsf@stark.dyndns.tv>
+Comments: In-reply-to Greg Stark <gsstark@mit.edu>
+       message dated "07 Jan 2003 13:21:47 -0500"
+Date: Tue, 07 Jan 2003 14:01:53 -0500
+Message-ID: <19749.1041966113@sss.pgh.pa.us>
+From: Tom Lane <tgl@sss.pgh.pa.us>
+X-Virus-Scanned: by AMaViS new-20020517
+Precedence: bulk
+Sender: pgsql-hackers-owner@postgresql.org
+X-Virus-Scanned: by AMaViS new-20020517
+Status: OR
+
+Greg Stark <gsstark@mit.edu> writes:
+> You missed the point of his post. If one process in your database does
+> something nasty you damn well should worry about the state of and validity of
+> the entire database, not just that one backend.
+
+Right.  And in fact we do blow away all the processes when any one of
+them crashes or panics.  Nonetheless, memory isolation between processes
+is a Good Thing, because it reduces the chances that a process gone
+wrong will cause damage via other processes before they can be shut
+down.
+
+Here is a simple example of a scenario where that isolation buys us
+something: suppose that we have a bug that tromps on memory starting at
+some point X until it falls off the sbrk boundary and dumps core.
+(There are plenty of ways to make that happen, such as miscalculating
+the length of a memcpy or memset operation as -1.)  Such a bug causes
+no serious damage in isolation, because the process suffering the
+failure will be in a tight data-copying or data-zeroing loop until it
+gets the SIGSEGV exception.  It won't do anything bad based on all the
+data structures it has clobbered during its march to the end of memory.
+
+However, put that same bug in a multithreading context, and it becomes
+entirely possible that some other thread will be dispatched and will
+try to make use of already-clobbered data structures before the ultimate
+SIGSEGV exception happens.  Now you have the potential for unlimited
+trouble.
+
+In general, isolation buys you some safety anytime there is a delay
+between the occurrence of a failure and its detection.
+
+> Processes by default have complete memory isolation. However postgres
+> actually weakens that by doing a lot of work in a shared memory
+> pool. That memory gets exactly the same protection as it would get in
+> a threaded model, which is to say none.
+
+Yes.  We try to minimize the risk by keeping the shared memory pool
+relatively small and not doing more than we have to in it.  (For
+example, this was one of the arguments against creating a shared plan
+cache.)  It's also very helpful that in most platforms, shared memory
+is not address-wise contiguous to normal memory; thus for example a
+process caught in a memset death march will hit a SIGSEGV before it
+gets to the shared memory block.
+
+It's interesting to note that this can be made into an argument for
+not making shared_buffers very large: the larger the fraction of your
+address space that the shared buffers occupy, the larger the chance
+that a wild store will overwrite something you'd wish it didn't.
+I can't recall anyone having made that point during our many discussions
+of appropriate shared_buffer sizing.
+
+> So the reality is that if you have a bug most likely you've only corrupted the
+> local data which can be easily cleaned up either way. In the thread model
+> there's also the unlikely but scary risk that you've damaged other threads'
+> memory. And in either case there's the possibility that you've damaged the
+> shared pool which is unrecoverable.
+
+In a thread model, *most* of the accessible memory space would be shared
+with other threads, at least potentially.  So I think you're wrong to
+categorize the second case as unlikely.
+
+                       regards, tom lane
+
+---------------------------(end of broadcast)---------------------------
+TIP 6: Have you searched our list archives?
+
+http://archives.postgresql.org
+