| Deutsch English Français Italiano |
|
<vd7e62$tdq8$3@dont-email.me> View for Bookmarking (what is this?) Look up another Usenet article |
Path: ...!news.mixmin.net!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: Lawrence D'Oliveiro <ldo@nz.invalid> Newsgroups: comp.os.vms Subject: Re: Apache + mod_php performance Date: Fri, 27 Sep 2024 23:13:06 -0000 (UTC) Organization: A noiseless patient Spider Lines: 29 Message-ID: <vd7e62$tdq8$3@dont-email.me> References: <vcv0bl$39mnj$1@dont-email.me> <vcvmu1$3cnv1$2@dont-email.me> <vd10re$nmp$1@reader1.panix.com> <vd1bdp$3npm3$1@dont-email.me> <vd1lgd$dbq$1@reader1.panix.com> <vd1u8j$3qqpg$1@dont-email.me> <vd25hj$3s2q8$1@dont-email.me> <vd3kkb$66dq$1@dont-email.me> <vd3r5d$74q1$1@dont-email.me> <vd5196$e44d$1@dont-email.me> <vd51kr$i6sg$2@dont-email.me> <vd54jp$e44c$1@dont-email.me> <vd55n2$ilcl$4@dont-email.me> <vd6dnk$nrif$2@dont-email.me> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Injection-Date: Sat, 28 Sep 2024 01:13:07 +0200 (CEST) Injection-Info: dont-email.me; posting-host="2132f4845d2292b1a04f05d8b30f9975"; logging-data="964424"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/Wnkw+C7MVtKmpzLguyRw9" User-Agent: Pan/0.160 (Toresk; ) Cancel-Lock: sha1:FVALqXtDWSZaXDzeA8CUlgvwxnk= Bytes: 2679 On Fri, 27 Sep 2024 09:59:16 -0400, Arne Vajhøj wrote: > You setup a read attention AST, it triggers and then you know that there > are data to be read. There is no reason to make reading async then, > because you know it will not block. I wouldn’t bother with ASTs at all, though I would use async QIOs with I/O status blocks. Here is my proposed control flow, which is very similar to a *nix-style poll loop: 0) Clear the event flag you are going to use in the next step. 1) Start the initial set of async QIOs on all the channels I want to monitor. Give them all the same event flag to set on completion (e.g. the usual default EFN 0). Don’t specify any completion ASTs, but do specify I/O status blocks. 2) Wait for the specified EFN to become set. 3) Clear that EFN. 4) Go through all your I/O status blocks, and process all I/Os that have completed (status field ≠ 0). Queue new async I/Os for those channels (and any new ones) as appropriate. 5) If you still have a nonempty set of async QIOs outstanding (i.e. a nonempty set of channels being monitored), then go back to step 2. Otherwise, you are shutting down, so stop. How does that sound? Hmmm ... I just realized ... doesn’t QIO immediately clear the EFN you specify, before queueing the actual I/O request? That might blow the whole thing ...