If the canisters are on the same subnet, a canister-to-canister call may complete within the same execution round (each consensus round includes one execution round).
If they are not on the same subnet, based on my understanding, it requires at least four consensus rounds.
Inter-canister call latency on the same subnet is significantly lower than any inter-canister call across different subnets. Calls between canisters on different subnets are referred to as X-Net calls, which operate at the level of communication between two subnets and are constrained by factors such as subnet signatures and subnet queues.
Canister-to-canister calls are always update calls, regardless of whether the target method is declared as a query or an update. In practice, latency is influenced much more by whether the canisters are on the same subnet than by whether the call is an update or a query.
This is correct, although this will only work if source and target canister have very little load on them. With low load I would expect 1 round to call the target canister and 1 round to start processing the response. With high load it will take longer
Four rounds actually:
1 round to put the call in the output queue of the source subnet
1 round for the target subnet to accept the call
1 round for the target subnet to run the call and put it in its output queue
1 round for the source subnet to accept the call
Correct in this context, small addition: canister-to-canister calls can also be of type ‘composite query’, which doesn’t run under consensus. But then the call is not made from an update context