【Linux】linux线程--thread线程概念

1.线程和进程的关系

(1)线程和进程的关系就是流水线和工厂之间的关系。

-线程依附于进程才能存在,如果没有进程线程就不能单独存在

-多线程是为了提高整个程序的运行效率

(2)在我们写进程方面代码的时候是否存在线程呢:

是有的,从main函数开始运行的线程被称之为“主线程”。

(3)之前的博客我们所理解的进程在内核当中就是一个task_struct结构体,该结构体当中的成员变量pid被我们称之为进程ID;

但其实操作系统当中没有线程的概念,程序员所说的创建线程,本质上在Linux操作系统当中就是创建轻量级进程(lwp),所以轻量级进程等价于线程(行业中约定俗成的就称之为线程)。

2.pid & tgid

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

在task_struct结构体当中:

     pid_t pid;  //就是轻量级进程id,也被称之为线程id,不同的线程具有不同的pid;

     pid_t tgid; //轻量级进程组id,也被称之为进程id,一个进程当中的线程拥有相同的tgid。

但是为什么在介绍进程概念的时候说pid就是进程id?

因为主线程的pid和tgid相等,线程组=>进程,进程概念里面的进程id也就是线程组id:tgid

 3.线程的共享与独有

独有:

在进程虚拟地址空间的共享区当中:调用栈、寄存器、线程ID、errno、信号屏蔽字、调用优先级

 共享:

文件描述符表、用户ID、用户组ID、信号处理方式、当前进程的工作目录

4.线程的优缺点

优点:

(1)多线程的程序,拥有多个执行流,合理使用(控制线程的访问时序问题),可以提高程序的运行效率。

(2)多线程程序的线程切换比多进程程序快,付出的代价小(有些可以共享的数据(全局变量)就能在线程切换的时候不进行切换)。

(3)可以充分发挥多核CPU并行的优势。

(4)计算密集型的程序,可以进行拆分,让不同的线程执行计算不一样的事情。

(5)I/O密集型的程序,可以进行拆分,让不同的线程执行不同的I/O操作,可以不用串行运行,提高程序运行效率。

缺点:

(1)编写代码的难度更高。

(2)代码的鲁棒性(稳定性)要求更高:一个线程崩溃,整个进程就崩溃。

(3)线程数量并不是越多越好:随着线程的数量增多,进程的运行效率符合正态分布,随着线程数量增多,会导致线程切换的次数增多。

(4)缺乏访问控制,可能会导致程序产生二义性结果。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值