On 10/24/07, Jim Jagielski <[EMAIL PROTECTED]> wrote:
>
> On Oct 24, 2007, at 8:54 AM, Jim Jagielski wrote:
>
> >
> > On Oct 23, 2007, at 7:34 PM, Jeff Trawick wrote:
> >
> >>
> >> Alternative opinions?
> >
> > Alternative implementations are welcomed.
> >
>
> Certainly one trade-off would be speed over space; having
> pid_table an actual (C) array of pids.
current space before creating any child processes:
. a small bit of ap_table overhead
. an array of HARD_SERVER_LIMIT * sizeof(table_entry), where
table_entry is a couple of char *
. and more storage allocated/lost as we add entries to the table
future space before and after creating any child processes:
. an array of HARD_SERVER_LIMIT * sizeof(pid_t)
(though I see we pass pid around as an int so maybe sizeof(int) is a
more accurate way to describe it)
we just won the space trade-off
> When "setting" we would
> sequentially scan through that array for an "empty"
> space and tuck the pid in there; when removing we would
> scan though until we found our pid and unset it (0).
current lookup:
ap_snprintf(apid, sizeof(apid), "%d", pid);
for (i = 0; i < HARD_SERVER_LIMIT; i++) {
if (!strcasecmp(pid_table[i].key, apid) {
break;
}
}
future lookup:
for (i = 0; i < HARD_SERVER_LIMIT; i++) {
if (pid_table[i] == pid) {
break;
}
}
we just won the speed tradeoff
currently, when we actually modify the table to add or remove a pid,
we do this sort of logic:
else { /* delete an extraneous element */
for (j = i, k = i + 1; k < t->a.nelts; ++j, ++k) {
elts[j].key = elts[k].key;
elts[j].val = elts[k].val;
}
--t->a.nelts;
}
instead of simply setting the array element to 0
> I haven't profiled this so it actually might be better
> than the overhead of using ap_tables...
>
> Should I look at something like the above?
please ;)
(I need to get back to analyzing the proposed 1.3 proxy change to
ensure that differences between 1.3 utility routines and apr versions
don't make that a bad idea, as well as actually test it with more than
a cut-n-paste of the time string example in the asctime man page)