redis dict
结构
dict使用链地址法解决冲突,size
为$2^n$,sizemask = size - 1
,用于计算key所属的bucket上,避免了mod,还便于处理scan时发生rehash的情况。每个dict有两个dictht,多个出来的一个用于rehash。
dict使用链地址法解决冲突,size
为$2^n$,sizemask = size - 1
,用于计算key所属的bucket上,避免了mod,还便于处理scan时发生rehash的情况。每个dict有两个dictht,多个出来的一个用于rehash。
reids的list采用的是双向链表的实现,未使用dummy node。
|
|
void*
来保存节点值,并提供free
,dup
,match
来处理节点)sds主要由len
,alloc
和buf
构成。其中buf
是柔性数组,分配sds的时候,这个结构体会作为header。
|
|
为sds分配空间,initlen
是字符串的长度,1是末尾的’\0’。
RWMutex,即读写锁,可以被多个的reader或一个writer获取使用。
在使用RWMutex的时候,同一个reader是不应该连续调用Rlock
多次的,这样做不但没有意义,还有可能导致死锁,具体代码如下:
之前有记录过python Queue的使用,以及multiprocessing.Process模块。现在看看multiprocessing.Queue
的具体工作方式(本文基于Python 3.7.4)。
multiprocessing.Queue
定义在queues.py中,除此之外还定义了SimpleQueue
和JoinableQueue
,是FIFO队列。
之前有记录过python进程间通信的几个方式,现在来看看这个模块的具体的是怎样工作的(本文基于Python 3.7.4)。
multiprocessing.Process
典型的使用方式为,
|
|
以这段代码为例,看看进程的执行过程。