专业游戏门户,分享手游网游单机游戏百科知识攻略!

嗨游网
嗨游网

线程是什么,线程的基本概念

来源:小嗨整编  作者:小嗨  发布时间:2022-12-26 11:54
摘要:线程是什么,线程的基本概念什么是线程?linux内核中是没有线程这个概念的,而是轻量级进程的概念:LWP。一般我们所说的线程概念是C库当中的概念。线程是怎样描述的?线程实际上也是一个task_struct,工作线程拷贝主线程的task_st...

线程是什么,线程的基本概念

什么是线程?

linux内核中是没有线程这个概念的,而是轻量级进程的概念:LWP。一般我们所说的线程概念是C库当中的概念。

线程是怎样描述的?

线程实际上也是一个task_struct,工作线程拷贝主线程的task_struct,然后共用主线程的mm_struct。线程ID是在用task_struct中pid描述的,而task_struct中tgid是线程组ID,表示线程属于该线程组,对于主线程而言,其pid和tgid是相同的,我们一般看到的进程ID就是tgid。

即:

线程是什么,线程的基本概念

获取线程ID和主线程ID的值:

用户态系统调用mm_struct对应的结构
线程IDpid_t gettid(void)pid_t pid
进程IDpid_t getpid(void)pid_t tgid

但是获取该gettid系统调用接口并没有被封装起来,如果确实需要获取线程ID,可使用:

#include<sys/syscall.h>
int TID =syscall(SYS_gettid);

则对线程组而言,所有的tgid一定是一样的,所有的pid一定是不一样的。主线程pid和tgid一样,工作线程pid和tgid一定不一样。

如何查看一个线程的ID

命令:ps -eLf

线程是什么,线程的基本概念

上述polkitd进程是多线程的,进程ID为731,进程内有6个线程,线程ID为731,764,765,768,781,791。

如图:

线程是什么,线程的基本概念

多线程如何避免调用栈混乱的问题?

工作线程和主线程共用一个mm_struct,如果都向栈中压栈,必然会导致调用栈出错。

实际上工作线程压栈是压了共享区,该共享区包含了许多线程独有的资源。如图:

线程是什么,线程的基本概念

每一个线程,默认在共享区中占有的空间为8M,可以使用ulimit -s修改。

进程是资源分配的基本单位,线程是调度的基本单位。

线程独有资源

  1. 线程ID

  2. 一组寄存器

  3. errno

  4. 信号屏蔽字

  5. 调度优先级

线程共享资源和环境

  1. 文件描述符表

  2. 信号的处理方式

  3. 当前工作目录

  4. 用户id和组id

为什么要有多线程?

举个生活中的例子, 这就好比去银行办理业务。到达银行后, 首先取一个号码, 然后坐下来安心等待。这时候你一定希望, 办理业务的窗口越多越好。如果把整个营业大厅当成一个进程的话, 那么每一个窗口就是一个工作线程。

线程带来的优势

  1. 线程会共享内存地址空间。

  2. 创建线程花费的时间要少于创建进程花费的时间。

  3. 终止线程花费的时间要少于终止进程花费的时间。

  4. 线程之间上下文切换的开销, 要小于进程之间的上下文切换。

  5. 线程之间数据的共享比进程之间的共享要简单。

  6. 充分利用多处理器的可并行数量。(线程会提高运行效率,但当线程多到一定程度后,可能会导致效率下降,因为会有线程调度切换。)

线程带来的缺点

  1. 健壮性降低:多个线程之中, 只要有一个线程不够健壮存在bug(如访问了非法地址引发的段错误) , 就会导致进程内的所有线程一起完蛋。

  2. 线程模型作为一种并发的编程模型, 效率并没有想象的那么高, 会出现复杂度高、 易出错、 难以测试和定位的问题。

注意

  1. 并不是只有主线程才能创建线程, 被创建出来的线程同样可以创建线程。

  2. 不存在类似于fork函数那样的父子关系, 大家都归属于同一个线程组, 进程ID都相等, group_leader都指向主线程, 而且各有各的线程ID。
    通过group_leader指针, 每个线程都能找到主线程。主线程存在一个链表头,后面创建的每一个线程都会链入到该双向链表中。

  3. 并非只有主线程才能调用pthread_join连接其他线程, 同一线程组内的任意线程都可以对某线程执行pthread_join函数。

  4. 并非只有主线程才能调用pthread_detach函数, 其实任意线程都可以对同一线程组内的线程执行分离操作。

线程的对等关系:

线程是什么,线程的基本概念


本文地址:IT问答频道 https://www.eeeoo.cn/itwenda/886351.html,嗨游网一个专业手游免费下载攻略知识分享平台,本站部分内容来自网络分享,不对内容负责,如有涉及到您的权益,请联系我们删除,谢谢!


IT问答
小编:小嗨整编
相关文章相关阅读
  • win10电脑如何关闭超线程

    win10电脑如何关闭超线程

    1、在电脑上打开开始菜单,找到系统配置选项,并点击打开。2、在跳转的界面中,点击上方的引导选项。3、在打开的引导界面中,找到高级选项,并点击打开。4、在打开的高级选项中,找到处理器个数,并选择为一个。5、设置完成后,点击下方的确定选项即可完...

  • 进程和线程是什么

    进程和线程是什么

    进程是资源分配的基本单位,它是程序执行时的一个实例,在程序运行时创建;线程是程序执行的最小单位,是进程的一个执行流,一个线程由多个线程组成的。什么是进程进程是资源(CPU、内存等)分配的基本单位,它是程序执行时的一个实例。程序运行时系统就会...

  • 进程和线程是什么

    进程和线程是什么

    进程是资源分配的基本单位,它是程序执行时的一个实例,在程序运行时创建;线程是程序执行的最小单位,是进程的一个执行流,一个线程由多个线程组成的。什么是进程进程是资源(CPU、内存等)分配的基本单位,它是程序执行时的一个实例。程序运行时系统就会...

  • 核心数和线程数是什么意思

    核心数和线程数是什么意思

    核心数指的是cpu内核数量,表示一个cpu由多少个核心组成;cpu核心是cpu的重要组成部件,在内核频率、缓存大小等条件相同的情况下,cpu核心数量越多,cpu的整体性能越强。线程数是一种逻辑的概念,简单地说,就是模拟出的cpu核心数。cp...

  • 多线程是什么意思

    多线程是什么意思

    线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位,而多线程就是指从软件或者硬件上实现多个线程并发执行的技术,具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。线程是...

  • PHP中的多线程

    PHP中的多线程

    在php编程中,如果我们需要执行多个任务或同时处理多个请求,多线程是一种非常重要的编程技术。多线程可以实现多个线程同时运行,提高程序效率,提升用户体验。一、PHP多线程介绍PHP多线程是指同时执行两个或多个线程的程序,每个线程都是一个独立的...

  • 线程和进程的区别是什么

    线程和进程的区别是什么

    线程和进程的区别:1、线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小;2、进程相对独立,需要通过显式机制进行通信,切换开销较大;而线程的管理更为灵活,进程的管理相对复杂。线程和进程是操作系统中...

  • superpi,superpi支持多核和多线程吗一般的多核cpu跑superpi用到...

    superpi,superpi支持多核和多线程吗一般的多核cpu跑superpi用到了多核还

    1,superpi支持多核和多线程吗一般的多核cpu跑superpi用到了多核还superpi只支持单线程~就是只用一个核心来计算多核无优势~CPU频率越高就算的越快你好!这个是单核的。如果要多线程,请跑wPrime和Fritz仅...

  • 周排行
  • 月排行
  • 年排行

精彩推荐