并发编程

以下是一些常用的并发编程模型和技术:

  1. 信号量(Semaphore):用于保护共享资源、协调进程间同步和互斥操作的机制,可以限制对某个共享资源的访问数量。
  2. 锁:在多线程或多进程的环境中,如果多个线程或进程同时访问共享数据,可能会导致数据不一致或竞争条件等问题,从而影响程序的正确性和可靠性。为了解决这些问题,可以使用锁来同步多个线程或进程之间对数据的访问,锁一般分为两种,互斥锁和读写锁。
  3. 原子操作(Atomic Operation):通过CPU提供的原子指令(例如Compare-and-swap、Fetch-and-add等)来对内存进行原子操作,从而避免并发情况下的数据竞争。
  4. 事件驱动(Event-driven):使用消息队列、事件循环等机制,将任务分解为小而独立的事件单元,并通过异步调用来执行这些事件单元,以提高程序的并发性能。
  5. Actor模型:基于对象的并发编程模型,通过创建多个Actor对象,每个对象都有自己的状态和行为,可以相互发送消息来进行通信和协作。
  6. 协程(Coroutine):一种轻量级的线程,可以在一个或多个线程中执行,通过协作式调度的方式实现非抢占式的多任务处理,从而提高程序的并发性能。
  7. 数据流(Dataflow):使用管道、通道等机制,将数据从一个任务顺序传递到另一个任务,以实现并发数据处理。

自旋锁:即CAS

读写锁:常见IO操作中的读写锁

互斥锁:

信号量:

事件驱动

数据流

数据流模型是go语言中最常见的一个模型,它使用了select加channel的方法实现了数据流模型,每一份数据就像水流一样流动。

原子操作