Lisp HUG Maillist Archive

Re: The right idiom for reading from CAPI panes

Im sorry, but I don't know how I got on this list, but can the administrator please remove me or can someone inform me on how to do it. I have used lispworks but it was for a class, and I do not use it anymore. Thank you all and I apologize for any inconvenience. 

---- Original message ----
>Date: Fri, 25 Jan 2008 18:08:24 -0700
>From: David McClain <dbm@refined-audiometrics.com>  
>Subject: Re: The right idiom for reading from CAPI panes  
>To: Edi Weitz <edi@agharta.de>
>Cc: lisp-hug@lispworks.com
>
>   Whoa! Edi!
>   You have certainly given me a lot of stuff to chew
>   on... 
>   I just had a response, from someone watching this
>   thread of conversation, that he has used Erlang for
>   such cases. I have used Erlang in the past, but I
>   didn't realize its kernel was fully re-entrant. But
>   Erlang's in-situ module update philosophy is
>   certainly something we are aiming for. And I think
>   Lisp could shine in this regard.
>   But your response here shows me what a remarkable
>   mind you have. I am impressed!
>   David McClain
>   Chief Technical Officer
>   Refined Audiometrics Laboratory
>   4391 N. Camino Ferreo
>   Tucson, AZ  85750
>   email: dbm@refined-audiometrics.com
>   phone: 1.520.390.3995
>   web: http://www.refined-audiometrics.com
>   On Jan 25, 2008, at 17:40, Edi Weitz wrote:
>
>     Hi David,
>     Thanks for your thoughts on this.  Your analysis
>     makes it pretty
>     obvious that my idea about how the "big lock" is
>     implemented was
>     wrong.  And your test cases also inspired me to
>     play around a bit
>     more.  Here are some findings:
>      1. I did all my tests on Windows, but
>     unsurprisingly the results were
>         the same as yours on OS X.
>      2. In case someone here cares, AllegroCL (8.1 on
>     Windows) exposes the
>         same behaviour.  You can also lock up its
>     IDE completely if your
>         threads keep the Lisp image busy.
>      3. This is a machine with an Intel Core 2 Duo,
>     i.e. it has two cores.
>         As expected, with both LispWorks and
>     AllegroCL the CPU utilization
>         never went beyond 50%.
>      4. I then ran the tests on a 64-bit Linux (same
>     hardware) using
>         OpenMCL.  The listener there remained fully
>     responsive and the CPU
>         was at 100%.
>      5. I was then reminded of the remark in the
>     LispWorks manuals that
>         while there can only be one Lisp thread at a
>     time there could be
>         other threads executing foreign code in
>     parallel.  That obviously
>         means that whenever the Lisp calls into FLI
>     land, the OS must get
>         a chance to switch threads.  So, I modified
>     your test code a
>         little (see attachment) to see how usage of
>     the FLI might affect
>         the results.
>      6. First of all, the high optimization settings
>     in FOO1 are there for
>         a reason.  If you don't have them, a call
>     to (TEST) will make the
>         IDE a bit sluggish but it won't lock it
>     up.  My guess is that Lisp
>         functions usually relinquish the big lock at
>     their entry points,
>         but it seems you can optimize that away.
>      7. The next (at least to me) surprising result
>     is that DOIT1-2 is
>         actually faster than DOIT1-1 - on my machine
>     it's approximately
>         6.5 seconds vs. 8.5 seconds.  I have no
>     explanation for this.
>      8. Now for the real test: A call to (TEST) will,
>     as I already said,
>         lock up the IDE.  Also, if you look at
>     *COUNT1* and *COUNT2* after
>         the test is finished, you'll see that either
>     one of the threads
>         didn't run at all or that they both managed
>     to finish completely
>         without being killed.  This is equivalent
>     to your original code.
>         A call to (TEST :FLI T) OTOH will /not/ lock
>     up the IDE.
>         Specifically, you can investigate the
>     counters while the test is
>         running and you'll see that both threads are
>     progressing.  So,
>         even with this "simulated FLI call" the big
>     lock loses its power.
>      9. The priority setting doesn't seem to make a
>     big difference for
>         these tests.
>     10. Now look at the value of *FOO* after (TEST
>     :FLI T) has finished.
>         It is not what one would expect it to be if
>     there were some kind
>         of atomicity guarantee for the SETQ form. 
>     I think this shows what
>         you'll have to deal with once you're working
>     with a real
>         SMP-capable Lisp.
>     Let me finally drive this long-winded message back
>     home to my original
>     topic.  Do you remember my toy example with the
>     A1-A2-A3-... and
>     B1-B2-B3-... sequences?  Now, as LispWorks must
>     call into the native
>     windowing system in both cases (A and B), there's
>     certainly some FLI
>     machinery involved.  So, it isn't completely
>     unthinkable that there
>     actually /are/ thread switches within these
>     sequences.  Most likely
>     there won't be enough back and forth for the
>     invalid return value to
>     really show up, but I wouldn't be 100% sure that
>     reading from CAPI
>     objects from the wrong thread is always totally
>     safe.
>     OK, that's it for now.  Any comments?
>     Cheers,
>     Edi.
>     PS: Maybe I /do/ have an explanation for #7 above
>     (or maybe this is
>         just nonsense).  I could imagine some kind
>     of "thread congestion"
>         going on there - the OS is trying to give
>     time slices to other
>         Lisp threads (the IDE has some), but they
>     always immediately
>         return because DOIT1-1 doesn't give up the
>     big lock.  This results
>         in the DOIT1-1 thread having an unfair share
>     of the execution time
>         alloted to the whole process and thus
>     increases the pressure on
>         the OS to try even harder to switch to other
>     threads.  In other
>         words, the time difference one can observe
>     is mostly owed to
>         "failed" attempts to switch threads and it's
>     not time spent in the
>         Lisp loops.  Does that make sense?
>     <foo2.lisp>


Updated at: 2020-12-10 08:44 UTC