线程并发-同步和异步

114 阅读2分钟

同步

在很多时候,我们需要多个进程或线程之间相互配合完成一个任务,多个串行程序可能都要对一个共享资源进行访问,或者相互传递一些数据。这种情况下,我们需要协调程序的执行。同步的作用是避免在并发访问共享资源时可能发生的冲突,以及确保有条不紊地传递信息。
根据同步的原则,程序如果想要使用一个共享资源,就必须先请求该资源并获取它的访问权。当程序不再需要某个资源的时候,该程序需放弃对资源的访问权(释放资源)。在同一时刻,某个资源应该只被一个程序占用,一个程序对资源的请求不应该导致其他正在访问该资源的程序中断,而应该等到占用程序释放资源后再请求。
同步是为了解决数据共享过程中可能出现的“干扰”问题,常用方法为(伪)原子操作加锁。这些传统的解决方案有着不同的适应场景,在使用时要多加注意,尽可能遵循能用简单的操作就用简单的操作原则。

异步

数据传递也称为并发程序内部的通信,除同步外,我们也可以利用异步的方式对通信进行管理,这种方式使得数据可以不加延迟地发送给数据接收方。如果数据接收方还没有为接收数据做好准备,也不会造成数据接收方的等待,数据会被临时存储在通信缓存中。通信缓存是一种特殊的共享资源,可以同时被多个程序使用,数据接收方可以在准备就绪后按照 FIFO 组织队列进行接收。