PEP703中讲到的nogil
PEP703由nogil分支作者编写,其中描述了
biased reference counting(偏向引用计数),描述了引用计数的设计方式,该设计方式避免同一线程原子化对饮用计数的读写
本地引用计数(“local” reference count):本线程所拥有的引用计数
共享引用计数(“shared” reference count):其他线程使用原子化来访问该引用计数
interned string,小整数,静态分配的Python对象,True,False和None对象的本地引用计数将被置为-1,线程ID将被置为unsigned equivalent(
UINTPTR_MAX),保证这些对象不会被回收,一个比较常见的设计。
1 | struct _object { |
描述了PyObject的对象。
内存分配:Python使用pymalloc,需要在gil锁之下保证线程安全;作者建议使用性能良好的线程安全分配器mimalloc。
禁用free list
使用stop-the-world保证线程安全
消除分代垃圾回收使用非分代垃圾回收
延迟引用计数和偏向引用计数集成
对列表,字典集合等对象的修改必须持有锁