线程初识:
线程是轻量级的进程:
A. 线程不具备私有空间。
B. 因为资源共享,父线程结束,则子线程无可苟活。
a. 因此要使儿女线程正常存活,我们必须确保父亲的安全健康。
C. 每个线程有标识自己身份的id为tid。
D. 同一线程家族继承主线程(主进程)的资源。
E. 若某个线程族受到进程级的打击,则该族线程全部都会被影响。
F. 不同线程家族之间不产生联系。
线程只有父子和兄弟。
只有两代人,即父线程创建的线程是他的子线程,子线程创建的线程是自己的兄弟。因为子线程没有自己的资源,只是继承了父线程的资源。
线程较之于进程优缺:
最大优点是快。
调度
线程是程序调度的基本单位。
进程是资源分配的基本单位
线程为第三方库提供,意味着所有线程在用户空间运行。本来进程时代,所有人都需要父进程管理,而现在,我们会找一个主线程作为小组长,帮助父进程管理。
查看线程
$ ps aux -H
$ pstree -ap
pstree时{} 包裹的为线程
所有线程都共用的是父线程的pid,所以调用getpid()时得到的都是主线程即父线程的pid。每一个线程都具有进程pid的身份,每个线程都有,一个pid。
线程id即tid,只在一个进程空间有效,用以标记每个线程的身份。所以,要对线程做操作的话,用tid进程操作。
主线程pid存在但是被常被我们使用,我们只使用标识线程身份的tid。
不同进程内的线程要进行交流的话,其实是以其父亲的进程身份进行通信交流。而不是两个线程直接通信。
各进程之间相同tid并没有什么必要联系。
syscall(SYS_gettid);
syscall 层次特别低,最接近于内核,移植性特别差。上述调用可以得到自己的tid