线程——线程初识之基本概念

本文详细解析了线程的概念、特点与优势,包括线程与进程的区别、线程的生命周期、线程间的通信机制及如何通过命令行工具查看线程状态。深入探讨了线程如何提高程序执行效率,并介绍了在不同场景下使用线程的实践方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

线程初识:

  1. 线程是轻量级的进程:

    A. 线程不具备私有空间。

    B. 因为资源共享,父线程结束,则子线程无可苟活。

    a. 因此要使儿女线程正常存活,我们必须确保父亲的安全健康。

    C. 每个线程有标识自己身份的id为tid。

    D. 同一线程家族继承主线程(主进程)的资源。

    E. 若某个线程族受到进程级的打击,则该族线程全部都会被影响。

    F. 不同线程家族之间不产生联系。

  2. 线程只有父子和兄弟。

    只有两代人,即父线程创建的线程是他的子线程,子线程创建的线程是自己的兄弟。因为子线程没有自己的资源,只是继承了父线程的资源。

  3. 线程较之于进程优缺:

    最大优点是快。

    调度

    线程是程序调度的基本单位。

    进程是资源分配的基本单位

  4. 线程为第三方库提供,意味着所有线程在用户空间运行。本来进程时代,所有人都需要父进程管理,而现在,我们会找一个主线程作为小组长,帮助父进程管理。

  5. 查看线程

$ ps aux -H
$ pstree -ap

pstree时{} 包裹的为线程

  1. 所有线程都共用的是父线程的pid,所以调用getpid()时得到的都是主线程即父线程的pid。每一个线程都具有进程pid的身份,每个线程都有,一个pid。

  2. 线程id即tid,只在一个进程空间有效,用以标记每个线程的身份。所以,要对线程做操作的话,用tid进程操作。

  3. 主线程pid存在但是被常被我们使用,我们只使用标识线程身份的tid。

  4. 不同进程内的线程要进行交流的话,其实是以其父亲的进程身份进行通信交流。而不是两个线程直接通信。

  5. 各进程之间相同tid并没有什么必要联系。

  6. syscall(SYS_gettid);
    syscall 层次特别低,最接近于内核,移植性特别差。上述调用可以得到自己的tid

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值