多线程概念和线程接口

目录

1.线程概念

1.1进程和线程的关系

1.2pid本质上是轻量级进程id,换句话说,就是线程ID

1.3 linux内核是如何创建一个线程的呢?

1.4线程的共享与独有

1.5线程的优缺点:(重中之重)

2.线程控制

2.1线程创建

2.2线程终止

2.3线程等待

2.4线程分离


 

1.线程概念

  • 1.1进程和线程的关系

  • 这里借用《程序员的自我修养》中的一段话来说明Linux的多线程
    Windows对进程和线程的实现如同教科书一般标准, Windows 内核有明确的线程和进程的概念。在Windows API中,可以使用明确的API: CreateProcess 和CreateThread来创建进程和线程,并且有一系列的 API来操纵它们。但对于Linux来说,线程并不是一个通用的概念。
    Linux对多线程的支持颇为贫乏,事实上,在Linux内核中并不存在真正意义上的线程的概念。Linux 将所有的执行实体(无论是线程还是进程)都称为任务(Task), 每一个任务概念上都类似于一个单线程的进程,具有内存空间、执行实体、文件资源等。不过,Linux下不同的任务之间可以选择共享内存空间,因而在实际意义上,共享了同一个内存空间的多个任务构成了一个进程,这些任务也就成了这个进程里的线程。watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyI5Y2K5pyo5pak,size_19,color_FFFFFF,t_70,g_se,x_16
  • 结论1 :线程是依附于进程才能存在的,如果没有 进程,则线程不会单独存在
  • 结论2 :多线程的是为了提高整个程序的运行效率的
  • 线程也被称之为执行流,因为在执行用户写的代码(程序员创建的线程被称之为“工作线程”)
  • 1.2pid本质上是轻量级进程id,换句话说,就是线程ID

    • 在task_ struct当中
      • pid_ t pid; //轻量级进程id, 也被称之为线程id
      • 不同的线程拥有不同的pid
      • pid_ t tgid; //轻量级进程组id, 也被称之为进程id
      • 一个进程当中的线程拥有相同的tgid
    • 为什么进程概念的时候,说pid就是进程 id?
    • 线程因为主线程的pid和tgid相等,而我们当时进程中只有一个主线程。所以我们的pid就等于tgid。所以将pid成为进程id也就是现在的tgid。
  • 1.3 linux内核是如何创建一个线程的呢?

    • 其本质就是再在当前进程组中创建一个task_struct结构体,它拥有着和主线程不同的pid,指向同一块虚拟进程地址空间。

      a3343c96cd45790fe1d6086658e805c3.png

  • 1.4线程的共享与独有

    • 在进程虚拟地址空间的共享区当中
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

月半木斤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值