进程和线程
**进程是资源分配的最小单位,而线程是CPU调度的最小单位。**多线程之间共享同⼀个进程的地址空间,线程间通信简单,线程创建、销毁和切换简单,速度快,占用内存少,但是线程间会相互影响,
⼀个线程意外终止会导致同⼀个进程的其他线程也终止。而多进程间拥有各自独立的运行地址空间, 进程间不会相互影响,程序可靠性强,但是进程创建、销毁和切换复杂,速度慢,占用内存多,进程间通信复杂。
进程和线程的实现
在内存中都会有⼀个 task_struct 进程描述符与之对应。进程描述符包含了内核管理进程所有有用的信息,包括调度参数、打开文件描述符等等。进程描述符从进程创建开始就⼀直存在于内核堆栈中。Linux 是通过 PID 来区分不同的进程,内核会将所有进程的任务结构组成为⼀个双向链表。PID能够直接被映射称为进程的任务结构所在的地址,从而不需要遍历双向链表直接访问。
从内核来讲,并没有线程的概念,linux 把线程当做进程来实现。内核并没有特殊的调度算法或者定义特别的数据结构来表示线程。线程仅被看做⼀个与其它进程共享某些资源的进程。每个线程都拥有唯⼀属于自己的task_struct,所以在内核中,它看起来像是⼀个普通的进程(只是它和其他⼀些进程共享某些资源)