大模型本地部署,vLLM_推理优化,动手实验
2026/6/11 1:17:53
与进程一致,线程的核心作用是实现并发执行,尤其适合处理:
| 对比维度 | 进程 | 线程 |
|---|---|---|
| 资源分配单位 | 系统最小资源分配单位 | 系统最小执行单位 |
| 资源独立性 | 资源完全独立(地址空间、文件描述符等) | 共享进程资源,仅私有栈区 |
| 稳定性 | 稳定性高(一个进程崩溃不影响其他) | 稳定性低(一个线程崩溃导致整个进程崩溃) |
| 创建开销 | 大(需分配 3GB 独立地址空间) | 小(仅需开辟 8MB 栈区) |
| 并发度 | 低 | 高(资源共享,切换成本低) |
| 内部关系 | 进程间是独立关系 | 同一进程内线程是平级关系 |
bash
运行
# 显示所有线程的PID、PPID、LWP(线程ID)、状态、命令 ps -eLo pid,ppid,lwp,stat,comm # 显示所有线程的详细信息(包括CPU占用、内存等) ps -eLflwp:线程 ID(与pthread_self()获取的 ID 一致)stat:线程状态(如 R 运行、S 睡眠、Z 僵尸)c
运行
#include <unistd.h> char *getcwd(char *buf, size_t size);buf:存储路径的字符数组(需提前分配空间)。size:buf的最大长度(避免缓冲区溢出)。buf的指针(路径字符串)。NULL(错误原因通过errno查看)。c
运行
#include <unistd.h> int chdir(const char *path);path:目标路径(绝对路径或相对路径)。0。-1(错误原因通过errno查看)。所有线程函数均在<pthread.h>头文件中声明,编译时需链接线程库(添加-lpthread参数)。
c
运行
int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);thread:输出参数,存储新创建线程的 ID(需提前定义pthread_t变量)。attr:线程属性(一般设为NULL,使用默认属性)。start_routine:线程执行函数(函数指针),即线程的入口逻辑(回调函数),格式要求:c
运行
void *func(void *arg) { /* 线程逻辑 */ }arg:传递给start_routine的参数(无参数时设为NULL)。0。strerror()转换为错误信息)。c
运行
pthread_t pthread_self(void);pthread_t,打印时用%lu格式符)。c
运行
void pthread_exit(void *retval);retval:线程退出状态("临死遗言"),可通过pthread_join回收。c
运行
int pthread_cancel(pthread_t thread);thread:目标线程的 ID。0(仅表示请求发送成功,不代表线程已退出)。c
运行
int pthread_join(pthread_t thread, void **retval);thread:要回收的子线程 ID。retval:输出参数,存储子线程的退出状态(即pthread_exit的retval)。0。c
运行
int pthread_detach(pthread_t thread);pthread_join)。thread:目标线程的 ID(通常设为pthread_self(),即线程自分离)。0。-lpthread(链接线程库),例如:bash
运行
gcc thread_demo.c -o thread_demo -lpthreadpthread_mutex_t),避免数据竞争。pthread_join回收,否则会成为 "僵尸线程",占用系统资源。pthread_join让主线程等待子线程)。