views:

425

answers:

7

So I'm a little confused by this terminology.

Everyone refers to "Asynchronous" computing as running different processes on seperate threads, which gives the illusion that these processes are running at the same time.

This is not the definition of the word asynchronous.

a⋅syn⋅chro⋅nous
–adjective 
1. not occurring at the same time. 
2. (of a computer or other electrical machine) having each operation started only after the preceding operation is completed.

What am I not understanding here?

+7  A: 

The word "synchronous" implies that a function call will be synchronized with some other event.

Asynchronous implies that no such synchronization occurs.

It seems like the definition that you have there should really be the definition for "concurrent," or something. That definition looks wrong.


PS:

Here is the wiktionary definition:

asynchronous

  1. Not synchronous; occurring at different times.
  2. (computing, of a request or a message) allowing the client to continue during processing.

Which just so happens to be the exact opposite of what you posted.

John Gietzen
I got my definition from:http://dictionary.reference.com/browse/Asynchronous
Balk
I found the definitions Balk posted here: http://dictionary.reference.com/browse/asynchronous It seems the definition of the word varies drastically depending on context.
Steve Wortham
I'm not saying you made it up, I'm just saying that definitions #2 of the two sources are in direct opposition.
John Gietzen
+2  A: 

I would guess it's because they are not synchronized ;)

In other words... if one process gets stopped, killed, or is waiting for something, the other will carry on

Jiaaro
+1  A: 

Your second definition is more helpful here:

2. [...] having each operation started only after the preceding operation is completed.

When you make an asynchronous call, that call might not be completed before the next operation is started. When the call is synchronous, it will be.

Rytmis
Your description is correct, but it's the opposite of what that definition says...
Guffa
A: 

It really means that an asynchronous event is happening independently of other events whereas a synchronous event would be happening dependent of other events.

Joe Philllips
+2  A: 

It means that the two threads are not running in sync, that is, they are not both running on the same timeline.

I think it's a case of computer scientists being too clever about their use of words.

Synchronisation ,in this context, would suggest that both threads start and end at the same time. Asynchrony in this sense, means both threads are free to start, process and end as they require.

Greg B
+1  A: 

I believe that the term was first used for synchronous vs. asynchronous communication. There synchronous means that the two communicating parts have a common clock signal that they run by, so they run in parallel. Asynchronous communication instead has a ready signal, so one part asks for data and gets a signal back when it's available.

The terms was then adapted to processes, but as there are obvious differences some aspects of the terms work differently. For a single thread process the natural way to request for something to be done is to make a synchronous call that transfers control to the subprocess, and then control is returned when it's done, and the process continues.

An asynchronous call works just like asynchronous communication in the aspect that you send a request for something to be done, and the process doing it returns a signal when it's done. The difference in the usage of the terms is that for processes it's in the asynchronous processing that the processes runs in parallel, while for communication it is the synchronous communication that run in parallel.

So "computer or electrical machine" is really a too wide scope for making a correct definition of the term, as it's used in slightly different ways for different techniques.

Guffa
+1 for the clock signal. That is indeed where the term came from.
Robert Harvey
A: 

I think there's a slant that is slightly different to most of the answers here.

Asynchronous means "not happening at the same time".

In the specific case of threading:

  • Synchronous means "execute this code now".
  • Asynchronous means "enqueue this work on a different thread that will be executed at some indeterminate time in the future"

This usually allows you to "do two things at once" because of reasons like:

  • one thread is just waiting (e.g. for data to arrive on a serial port) so is asleep
  • You have multiple processors, so the two threads can run concurrently.

However, even with 128 processor cores, the case is the same: the work will be executed "at some time in the future" (if perhaps the very near future) rather than "now".

Jason Williams

related questions