1、同步
同步,就是协同步调, 按预定的先后次序进行运行。 就比如说,你做完了我再做,"同"字从字面上容易理解为一起动作,其实不是, "同"字应是指协同、 协助、 互相配合。如进程、 线程同步, 可理解为进程或线程A和B协调配合执行, A执行到一定程度时要依靠B的某个结果, 于是停下来, 示意B执行,B执行后将A所需的结果交付给A, A再继续操作。线程的同步机制用来控制多个线程对同一资源的访问,可以避免线程不安全的情况发生。
下面看一个运用互斥锁和同步机制来实现三个线程同步操作全局变量的例子:
可以看出运用了进程同步和互斥锁之后,并没有发生数据的混乱,保证了数据额正确性。在这里特别强调一下,task1、task2和task3的循环次数必须保持一致,否则会陷入死锁。
2、异步
在同步机制中,当一个线程正在操作共享资源,没有解锁的时候,其他线程默认是处于阻塞状态的,直到正在操作的线程解锁释放资源为止。异步则是一种相反的状态,即使不能获取锁,不会阻塞,会直接报错。为了方便理解同步和异步,举一个形象的例子来说明:
同步调用就是你喊你朋友吃饭 ,你朋友在忙,你就一直在那等, 等你朋友忙完了,你们一起去;
异步调用就是你喊你朋友吃饭 , 你朋友说知道了 , 待会忙完去找你 ,你就去做别的了。
进程池的apply_async函数就是一个异步的体现:
在上述代码中,callback函数是一个回调函数,它是将进程池中的子进程的返回值作为参数,在子进程执行结束之后由主进程回调执行的,也就是说,主进程可以通过回调函数对子进程的执行结果进行操作。