> I don't think the communication protocol between two processes, services, whatever has have the property of being synchronous or asynchronous.
This is news to those of us who have implemented or designed communication protocols between processes.
> It is more about how each side of the communication handles it internally.
You are confusing processing of information obtained via communication with the pattern of communication. A synchronous protocol is a lock-step exchange of data/meta-data between two communicating processes. You can have processes communicating via a synchronous protocol that handle the processing in an asynchronous manner. An asynchronous protocol does not require exchange of messages to be lock-step
A: HELO w/ MY CREDS <blocks>
B: HELO - ACCEPT CREDS
A: GET 'foo' <blocks>
B: HERE is 'foo' <data>
[A: queue foo data for async processing by an internal comp A']
A: GET 'bar' <blocks>
[A': processed 'foo']
B: HERE is 'bar' <data>
[A: queue bar data for async processing by an internal comp A']
...
[A': processed 'bar']
and then there could be this: A: HELO w/ MY CREDS <blocks>
B: HELO - ACCEPT CREDS
A: GET 'foo' <doesn't block>
A: GET 'bar' <doesn't block>
B: HERE is 'foo' <data> # B may even return 'bar' first in some cases
[A: queue foo data for processing ...]
A: GET 'foobar' <doesn't block>
B: HERE is 'bar' <data>
[A: queue bar data for processing]
...
B: HERE is 'foobar' <data>
...
Quaint diagrams we used to draw for protocols - this is just some random example from a quick search [note how it transitions from a sync handshake to async comm]:https://www.researchgate.net/publication/344006359/figure/fi...