同步和异步
发送, 接收和回应操作可能是同步或者异步的,一项同步操作阻塞后面的流程知道这个操作结束。
一个异步的操作是非阻塞的,只是初始化操作。 调用者可以通过其他机制来发现操作的完成请款。
同步操作需要理解什么是操作完成。 在远程任务中,发送方和接收方操作在信息发送给接收者收到后结束,在远程调用的情况下,发送,接收和回复完成判断标准是确定接收方时间偶到回应,例如有一个返回值。
另外,发送和接收结束在流程结束。 在流程执行过程中,发送方和接收方都在一个状态。
注意:同步和异步意味着阻塞和非阻塞,反之并不适用,并不是所有的阻塞是同步,并不是所有的非阻塞是异步。例如,在接收机器接收到消息之前阻塞的发送是阻塞的,但不是同步的,因为接收进程可能没有接收到消息。
异步消息传递允许更多的并发性。 因为一个进程不阻塞,在消息传递的过程中还可以做些其他的计算。对于接收方,这意味着可以同时接收不同端口的消息。在同步系统中,这种并行性可以通过为每个并发操作创建单独的进程来实现,但是这种方法需要额外的进程管理成本。
这一费用对于低wps来说是可以承受的,而对于高wps来说则是不可承受的
异步消息传递引入了几个问题。 如果消息不能发送怎么办? 发送放也许等不到确认,永远也收不到回复报错信息。 同理,需要一种机制去提醒异步接收者一个消息已经到达了。操作调用者可以学习通过轮询获得完成或者报错的信息,
获取软件中断,或者使用一个特殊的同步等待调用显式地等待稍后完成,如果以后需要通知应用程序有关操作,异步操作需要返回调用/事务id。在通知时,此id将被放置在某个全局位置,或作为参数传递给处理程序或等待调用
与异步消息传递相关的另一个问题与缓冲有关。如果异步发送的消息被缓冲在操作系统管理的空间中,那么一个进程可能会用大量消息冲击系统来填补这个空间