On 4/2/2010 11:00 PM, Gerald Dunn wrote:
>> Crux of the discussion ....Thread is needed where one thinks that a
>> aysnc-operation is needed .
>>      
> Basically you have it. I'd expand it to say when want concurrent tasks.
>    
Do the 'concurrent tasks' means ... non-dependable / independent 
concurrent tasks ? By independent I mean there is no concept of 
producer-consumer, as the producer-consumer are dependent on each other 
to fill-empty the buffer they share in between.

>    
>> In stone-age one used 'interrupts' for this. Right ?.
>>      
> Maybe interrupts were invented in the computer stone age but they're still 
> essential. I'll say every (or nearly every) CPU and 
> micro(controller/processor) uses interrupts. An 'interrupt' is really an 
> indication from the hardware that an event has happened- I/O pin switched, 
> timer expired, UART Rx/Tx, and so on.
>
>    
>> These days one
>> uses a 'watcher-thread' .......
>>      
> Probably not. Typically you can configure the hardware not to do anything 
> when your interrupt occurs except flip a register value indicating the event. 
> Your program can periodically check the value of a register to look for 
> change. This is referred to as polling but there's usually a trade-off with 
> this implementation. If you poll too frequently you waste time checking when 
> nothing's happened. If you poll too slowly you introduce latency from when 
> the event occurred.
>
>    
'Polling' is logically equivalent to creating a watcher-thread; where we 
wait for something to happen. The difference is that polling is used in 
micro-processor level and watcher thread is used in application layer. 
eg: I poll for if data has come in serial-port or not. (Polling) or I 
poll for that directory contents are changed (some new addition of file 
/ deletion of file)or not (Keeping a directory watcher-thread).

> The other method is to register a function pointer or pointers that get 
> called by the hardware when your interrupt occurs. In this way there's really 
> no latency and you don't need to worry about the polling concerns I mentioned 
> if they are actually a concern. In this case your main thread halts execution 
> where it was at and your interrupt handler is called. The handler returns and 
> your main thread picks up where it left off.
>
>    
I got this point too. Interrupt handler is logically equivalent 
event-handler design. Where we register a call-back event handler 
function, which is called in response to when some event has occurred.

Something like:
funchandler()
{
    //do something when event-id comes
}

main()
{
     Register(funchandler, eventid);
     /// do some processing
    // continue more processing
}

But still here a different thread will be used
CPUThread()
{
    PostEvent(eventID);    //this will post event
}

In the above main() is first thread, while funchandler() gets called in 
the thread-context of CPUThread().
Right ?
But then this is also multi-threading ... we are having two threads in 
this scenario.
Hence my original thought 'Whenever we think of async operation, we 
think of multithreading'.

> On your Intel processor I beleive your Windows installation sends some 
> assembly instructions to register interrupt handlers. I'm pretty certain it's 
> the same for all the other OS's and processors.
>
> I got a little off subject but hopefully it was helpful.
>
>    ----- Original Message -----
>    From: Knowledge Seeker
>    To: [email protected]
>    Sent: Friday, April 02, 2010 1:02 PM
>    Subject: Re: [c-prog] MultiThreading !?!
>
>
>
>    Crux of the discussion ....Thread is needed where one thinks that a
>    aysnc-operation is needed .
>    In stone-age one used 'interrupts' for this. Right ?. These days one
>    uses a 'watcher-thread' .......
>
>    Cheers.
>    Knowledge Seeker
>
>    On 4/2/2010 10:21 PM, Gerald Dunn wrote:
>    >  A socket was just a 'real-world' example.
>    >
>    >  ----- Original Message -----
>    >  From: John Gaughan
>    >  To: [email protected]
>    >  Sent: Friday, April 02, 2010 12:20 PM
>    >  Subject: Re: [c-prog] MultiThreading !?!
>    >
>    >
>    >
>    >  On 4/2/2010 9:45 AM, Gerald Dunn wrote:
>    >  >  Consider an application that waits for an incoming socket 
> connection. Typically the function call to accept the connection blocks. Just 
> in case 'blocks' isn't clear, it basically means the function will not return 
> until some condition is met. In this case the function would not return until 
> an incoming connection is established or until some other thread closed the 
> server socket, both of which could be indefinite. If your application just 
> had the one thread to accept the connection then you could never do anything 
> else. Now introduce another thread. This new thread could close the server 
> socket after a timeout or as the result of a button press (physical or 
> graphical), etc.
>    >  >
>    >
>    >  It doesn't even have to be a socket communication. Any asynchronous
>    >  communication with a separate process may be able to benefit from this
>    >  design.
>    >
>    >  I have written hardware drivers that used producer-consumer with
>    >  multiple threads on a single system, no sockets involved. But I do agree
>    >  that a good example would be a web server, which does use sockets and
>    >  multiple computers (clients).
>    >
>    >  --
>    >  John Gaughan
>    >  http://www.johngaughan.net/
>    >
>    >
>    >
>    >
>    >
>    >  [Non-text portions of this message have been removed]
>    >
>    >
>    >
>
>
>
>
>
> [Non-text portions of this message have been removed]
>
>
>    

Reply via email to