【Midjourney Mud印相终极指南】:20年图像生成专家首度公开3类Mud纹理映射失效根因与6步精准复刻法
2026/5/17 1:17:56
线程是轻量级的进程,隶属于某个进程,无法脱离进程独立存在。一个进程中默认包含一个主线程(对应程序入口main函数的执行流),用户可通过编程创建多个子线程,实现并发任务处理。
与进程一致,线程的核心作用是实现程序的并发执行,尤其适用于处理相对耗时的任务(如 IO 操作、网络请求、大数据计算等),能够有效利用 CPU 资源,提升程序的整体执行效率。
线程与进程在资源管理、稳定性、开销等方面存在显著差异,具体对比如下:
| 对比维度 | 进程 | 线程 |
|---|---|---|
| 资源分配 | 系统最小资源分配单位,拥有独立的 3GB 用户空间 + 1GB 内核空间 | 共享所属进程的资源,仅独立拥有栈区(默认 8MB)、寄存器、程序计数器 |
| 资源独立性 | 资源完全隔离,进程间默认无法共享 | 进程内线程共享资源(代码段、数据段、堆、文件描述符等) |
| 稳定性 | 一个进程崩溃,不会影响其他进程 | 一个线程崩溃会导致整个进程崩溃 |
| 创建开销 | 大(需分配完整的地址空间) | 小(仅需开辟栈区) |
| 并发度 | 低 | 高 |
Linux 下的线程编程遵循 POSIX 标准(pthread 库),核心编程步骤为:
plaintext
创建多线程 → 线程空间执行任务 → 线程资源回收(或设置分离属性自动回收)其中,线程退出后默认不会释放栈区资源,需通过手动回收或分离属性设置完成资源释放,否则会造成内存泄漏。
在 Linux 中,可通过以下命令查看线程的相关信息:
1.ps -eLo pid,ppid,lwp,stat,comm:显示线程的进程 ID、父进程 ID、线程 ID、状态及命令名。
2.ps -eLf:以完整格式显示进程和线程的信息(包含线程 ID、优先级等)。
pthread 库提供了一系列函数用于线程的创建、控制与资源管理,以下是最常用的核心函数:
int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);thread:输出参数,用于存储创建成功的线程 ID(需预先定义)。attr:线程属性,通常设为NULL表示使用默认属性(如默认栈大小、非分离属性)。start_routine:函数指针,指向线程的回调函数(线程的执行逻辑入口,即线程的工作空间)。arg:传递给回调函数的参数(可传递任意类型数据,需通过指针转换)。pthread_t pthread_self(void);pthread_t,通常可转换为unsigned long,格式化输出用%lu),失败返回非 0 值。void pthread_exit(void *retval);retval:线程退出时的返回状态(即 “临死遗言”,可传递任意类型指针,需注意避免返回局部变量指针)。int pthread_cancel(pthread_t thread);thread:需要被取消的线程 ID。int pthread_join(pthread_t thread, void **retval);thread:需要回收的子线程 ID。retval:输出参数,用于存储目标线程退出时的返回状态(对应pthread_exit的参数)。int pthread_detach(pthread_t thread);pthread_join。pthread_join回收资源。thread:需要设置分离属性的线程 ID(可传入自身线程 IDpthread_self())。