1. 如何顺序控制goroutine 如何保证在一个 goroutine 中看到在另一个 goroutine 修改的变量的值,如果程序中修改数据时有其他 goroutine 同时读取,那么必须将读取串行化。为了串行化访问,请使用 channel 或其他同步原语,例如 sync 和 sync/atom ...
分类:
其他好文 时间:
2021-05-23 23:08:09
阅读次数:
0
# 多线程编程并发编程的目的是:1. 提高资源的利用率2. 提高响应速度## 常见资源* 带宽* 链接数* cpu* 内存* gpu## 同步原语* 原子操作 * 保证内存读取-修改-写回序列原子执行。 * 原子意味着本地cpu不被中断或内存总线(或缓存)加锁 * 是同步的基础* 锁 * 原子操作 ... ...
分类:
其他好文 时间:
2020-07-12 12:03:55
阅读次数:
59
Zookeeper分布式过程协同技术 - 概念及基础 Zookeeper是什么? Zookeeper是一种分布式过程协同技术,其所提供的客户端API功能强大,其中包括: 保障强一致性。有序性和持久性。 实现通用的同步原语的能力。 在实际分布式系统中,并发往往导致不正确的行为。Zookeeper提供了 ...
分类:
其他好文 时间:
2020-06-25 23:05:35
阅读次数:
42
计算机科学中, 同步(synchronization)是指两个不同但有联系的概念:进程同步与数据同步。进程同步指多个进程在特定点会合(join up)或者握手使得达成协议或者使得操作序列有序。数据同步指一个数据集的多份拷贝一致以维护完整性。常用进程同步原语实现数据同步。 死锁:某一个进程占有共享资源 ...
分类:
其他好文 时间:
2020-06-25 09:40:03
阅读次数:
83
悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每 次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁。传 统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写 锁等,都是在做操作之前先上锁。再比如 Java 里面的同步原语 synchroniz ...
分类:
其他好文 时间:
2020-06-21 14:03:03
阅读次数:
67
Linux内核源码分析 -- 同步原语 -- 自旋锁 spinlock_t typedef struct spinlock { union { struct raw_spinlock rlock; #ifdef CONFIG_DEBUG_LOCK_ALLOC # define LOCK_PADSIZ ...
分类:
系统相关 时间:
2020-06-08 00:16:40
阅读次数:
138
Linux内核源码分析 -- 同步原语 -- 信号量 semaphore 源码位于 include/linux/semaphore struct semaphore { raw_spinlock_t lock; // 保护信号量的自旋锁 unsigned int count; // 现有的资源的数量 ...
分类:
系统相关 时间:
2020-06-07 19:39:35
阅读次数:
105
1.1,线程和进程的区别 进程是程序的一次执行过程,是系统运行的基本单位,进程是动态的,从系统运行一个程序即创建,直到系统关闭。如在Windows系统上打开qq这个程序,即创建了进程,关闭了qq这个程序,则进程结束 线程与进程有点类似,线程是比进程更少的执行单位,一个进程在执行的过程中会产生多个线程 ...
分类:
编程语言 时间:
2020-06-01 23:31:21
阅读次数:
117
悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每 次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁。传 统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写 锁等,都是在做操作之前先上锁。再比如 Java 里面的同步原语 synchroniz ...
分类:
其他好文 时间:
2020-04-25 00:42:12
阅读次数:
181
返回目录 本篇索引 (1)线程基本概念 (2)threading模块 (3)线程间同步原语资源 (4)queue (1)线程基本概念 当应用程序需要并发执行多个任务时,可以使用线程。多个线程(thread)同时运行在一个进程(process)的内部, 它们可以共享访问本进程内的全局变量数据和资源。各 ...
分类:
编程语言 时间:
2020-02-09 11:57:43
阅读次数:
90