C++的进程同步和异步

一、进程同步及异步的概念:


1、同步

       发出一个功能调用时,在没得到结果前,该调用永不返回。也就是必须一件一件事做,等前一件做完了才能做下一件事。就想起床要先刷牙、后吃饭,不能同时做。

      按照这个定义,其实绝大多数函数都是同步调用(例如 sin,isdigit 等)。但是一般而言,我们在说同步、异步的时候,特指那些需要其他部件协作或者需要一定时间完成的任务。最常见的例子就是 sendmessage。该函数发送一个消息给某个窗口,在对方处理完消息之前,这个函数不返回。当对方处理完毕以后,该函数才把消息处理函数所返回的lresult值返回给调用者。


2、异步:

        异步的概念和同步相对。当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。

        以casycsocket 类为例(注意,csocket从casyncsocket派生,但是其功能已经由异步转化为同步),当一个客户端通过调用connect函数发出一个连接请求后,调用者线程立刻可以朝下运行。当连接真正建立起来以后,socket底层会发送一个消息通知该对象。还比如 PostMessage。

        这里提到执行部件和调用者通过三种途径返回结果: 状态、通知回调。可以使用哪一种依赖于执行部件的实现,除非执行部件提供多种选择,否则不受调用者控制。如果执行部件用状态来通知,那么调用者就需要每隔一定时间检查一次,效率就很低(有些初学多线程编程的人,总喜欢用一个循环去检查某个变量的值,这其实是一种很严重的错误)。如果是使用通知的方式,效率则很高,因为执行部件几乎不需要做额外的操作。至于回调函数,其实和通知没太多区别。


        在计算机系统中,由于资源有限而导致了进程之间的资源竞争和共享,因此,进程的并发执行不仅仅是用户程序的执行开始时间的随机性和提高资源利用率的结果,也是资源有限性导致资源的竞争与共享对进程的执行过程进行制约所造成的。那么,在进程的并发执行过程中存在哪些制约呢?



二、同步与异步传输


1.同步传输面完试,叫你外面等着,马上出结果,就是同步传输。

2.异步传输面完试,让你回家等消息,这是异步传输。



三.同步阻塞与异步阻塞


  同步是阻塞模式,异步是非阻塞模式。

  可以理解为同步是指两个线程的运行是相关的,其中一个线程要阻塞等待另外一个线程的运行。异步的意思是两个线程毫无相关,自己运行自己的。

 

同步:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。 

异步:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。





你可能感兴趣的:(C++)