聊聊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内核中没有对线程做特殊处理,用户态的线程本质上还是一个进程。
➡️

继续阅读