聊聊Linux中线程和进程的联系与区别!
💡
原文中文,约9000字,阅读约需22分钟。
📝
内容提要
进程和线程是Linux中的核心概念,线程被称为轻量级进程,通过调用pthread_create函数在glibc库中创建。进程和线程都用task_struct结构表示,共享很多相同的字段。创建线程时,共享父进程的打开文件列表、目录信息和地址空间,而创建进程时这些是独立的。在Linux内核中,线程和进程都由task_struct管理,用户态的线程本质上是一个稍微轻量的进程。
🎯
关键要点
- 进程和线程是Linux中的核心概念,线程被称为轻量级进程。
- 在Linux中,进程和线程都用task_struct结构表示,共享很多相同的字段。
- 创建线程时,共享父进程的打开文件列表、目录信息和地址空间,而创建进程时这些是独立的。
- 线程的创建通过调用pthread_create函数实现,具体在glibc库中。
- 在内核中,进程和线程的相似之处远大于不同之处,都是抽象成task任务。
- 每个task_struct都有唯一的pid和tgid,tgid用于标识线程所属的进程。
- 创建进程和线程的底层实现都使用do_fork函数,但传入的标记不同。
- 创建线程时使用的clone_flags包括CLONE_VM、CLONE_FS、CLONE_FILES等。
- 在创建线程时,内存地址空间、文件系统信息和打开文件列表都是共享的。
- Linux内核中没有对线程做特殊处理,用户态的线程本质上还是一个进程。
🏷️
标签
➡️