主要观点:
- 介绍了 CPython 运行时的相关内容,包括其代表结构、初始化过程以及与字节码解释器的关系。
- 详细阐述了 CPython 运行时状态的表示结构,如
_PyRuntimeState、PyInterpreterState和PyThreadState等。 - 讲述了 CPython 启动时的代码流程,从
main函数到pymain_init再到Py_InitializeFromConfig等函数,最终完成运行时的初始化。
关键信息:
- CPython 运行时状态由
_PyRuntimeState表示,包含全局状态,重要字段有解释器状态列表和主线程状态字段等。 - 通常有一个主线程和一个主解释器,用户代码可创建子解释器和更多线程,运行时通过链表跟踪。
pymain_init调用_PyRuntime_Initialize和Py_InitializeFromConfig初始化运行时,后者创建主解释器和主线程状态。_PyInterpreterState_New和_PyThreadState_New分别创建主解释器和主线程状态,或创建新的子解释器和线程状态。
重要细节:
- CPython 运行时状态在
pylifecycle.c中声明为全局变量并静态初始化,通过_PyRuntimeState_INIT宏完成。 _PyInterpreterState_New根据情况设置主解释器或新的子解释器。new_threadstate函数用于创建新的线程状态,处理主线程状态设置或新线程状态创建。- 运行时初始化完成后可开始执行 Python 代码,下一篇将讲述字节码解释器执行字节码的过程。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。