newbie question on threading
Gonçalo Rodrigues
op73418 at mail.telepac.pt
Mon Oct 14 08:06:03 EDT 2002
More information about the Python-list mailing list
Mon Oct 14 08:06:03 EDT 2002
- Previous message (by thread): newbie question on threading
- Next message (by thread): Safe Psyco
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On 14 Oct 2002 00:42:07 -0400, aahz at pythoncraft.com (Aahz) wrote: >In article <7cpjqugerih8sos23strcsftgt53tbs8lo at 4ax.com>, >Gonçalo Rodrigues <op73418 at mail.telepac.pt> wrote: >>On 13 Oct 2002 02:32:32 -0400, aahz at pythoncraft.com (Aahz) wrote: >>>In article <jsngquskdhc0cpg867djcna0cl6u8tlm9l at 4ax.com>, >>>Gonçalo Rodrigues <op73418 at mail.telepac.pt> wrote: >>>> >>>>#Balancing act: We can't afford a pure busy loop, so we >>>>#have to sleep; but if we sleep the whole timeout time, >>>>#we'll be unresponsive. >>>> >>>>My question is: why is a busy loop not affordable (without a sleep >>>>call), e.g. something like (in pseudo-code description) >>>> >>>>while 1: >>>> <acquire lock> >>>> if <acquire sucessfull>: >>>> break >>>> if <timedout?>: >>>> break >>>> <calculate endtime> >>> >>>Consider this: >>> >>> while 1: >>> pass >>> >>>Given the above loop in a thread, how much useful work is the thread >>>doing? Not much, right? Well, adding an "if" statement to the loop >>>doesn't do any good for producing useful work. >> >>I must be missing something but I am not understanding. Isn't that what >>the wait method is supposed to do? Put the thread dormant, waiting until >>you get timedout or you can acquire the lock? The only difference >>between the pseudo-loop I wrote above and the one in the threading >>module is a call to to time.sleep - and that is the core of my question, >>why even bother to add the sleep call? Why not just a pure simple busy >>loop? Why can't we afford it? > >Note carefully that I said "useful work". The point is that a busy loop >consumes CPU resources, but it is *NOT* doing useful work, and in >consuming those CPU resources, it is keeping other threads from doing >useful work. Because time.sleep() causes an OS-level block, other >threads can run during the time.sleep(). The problem is a tradeoff >between the delay in response caused by calling time.sleep() versus the >amount of CPU time consumed by the busy loop. Thanks, I understand it now. > >In fact, you shouldn't even be using condition objects in the first >place, IMO. Figure out a way to use a Queue, and your application will >almost certainly be both more efficient *and* more responsive. And I am not. I am writing a small multithreaded app where the child threads dish out data precisely by pushing it into a Queue "owned" by the father thread. Once again, thanks for the explanation, Gonçalo Rodrigues
- Previous message (by thread): newbie question on threading
- Next message (by thread): Safe Psyco
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-list mailing list