在什么情况下 OS 会知道 Python 创建的线程?
Under what circumstances would the OS be aware of threads created by Python?
我的理解是,一般来说 OS 内核(例如 Linux) 而不是 确实可以看到用户 [=36] 中创建的任何线程=].此外,我相信 Linux 特别是 OS 内核只能看到 "tasks" 或进程,而不是 "threads" 本身。
此外,我不确定 CPython 是否真的会为任何事情使用多线程,除非明确使用,例如Python 或 C 标准 Python 库之一的 threading
包选择自己创建线程。我想这里的例外是 multiprocessing
或任何可能产生多个进程的 Python 库,在这种情况下 OS 内核将它们视为独立的。
在什么情况下 OS 内核会知道 Python 脚本创建的任何线程,包括它可能使用的任何模块?
在Linux中:
任务是一个线程,进程是一个地址space一个或多个线程。
User-space 线程直接在内核中表示。有 POSIX API 创建线程 pthread_create
并且有 Linux 线程实现 API 称为 NPTL,它将一个用户级线程映射到内核级任务 (task_struct
).
CPython
multithreading
模块使用 pthread_create
.
实现线程
我的理解是,一般来说 OS 内核(例如 Linux) 而不是 确实可以看到用户 [=36] 中创建的任何线程=].此外,我相信 Linux 特别是 OS 内核只能看到 "tasks" 或进程,而不是 "threads" 本身。
此外,我不确定 CPython 是否真的会为任何事情使用多线程,除非明确使用,例如Python 或 C 标准 Python 库之一的 threading
包选择自己创建线程。我想这里的例外是 multiprocessing
或任何可能产生多个进程的 Python 库,在这种情况下 OS 内核将它们视为独立的。
在什么情况下 OS 内核会知道 Python 脚本创建的任何线程,包括它可能使用的任何模块?
在Linux中:
任务是一个线程,进程是一个地址space一个或多个线程。
User-space 线程直接在内核中表示。有 POSIX API 创建线程 pthread_create
并且有 Linux 线程实现 API 称为 NPTL,它将一个用户级线程映射到内核级任务 (task_struct
).
CPython
multithreading
模块使用 pthread_create
.