专业汉语词典知识平台,分享汉字词语知识、历史文学知识解答!

励北网
励北网

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

来源:小易整编  作者:小易  发布时间: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函数, 其实任意线程都可以对同一线程组内的线程执行分离操作。

线程的对等关系:

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


本文地址:百科问答频道 https://www.neebe.cn/wenda/886351.html,易企推百科一个免费的知识分享平台,本站部分文章来网络分享,本着互联网分享的精神,如有涉及到您的权益,请联系我们删除,谢谢!


百科问答
小编:小易整编
相关文章相关阅读
  • 超线程是什么意思?

    超线程是什么意思?

    超线程是一种现当代多任务处理的技术,它可以使一个物理处理器核心有效地处理两个任务或更多任务。它通过在CPU中同时执行比物理处理核心更多的虚拟线程达到其目的。这被称为“虚拟处理”。超线程不仅有助于提高CPU的性能,而且可以降低新设计物理处理...

  • 线程数是什么意思?

    线程数是什么意思?

    线程是一种轻量级的进程,被视作操作系统内一种最小单位,它被应用程序利用来组织具有不同目标的任务,避免了系统资源的浪费。线程数是指一个程序中有多少个线程在同时执行任务,即使是一个最简单的应用程序,其中也会有一个主线程在跑,而日常使用到的多线...

  • 超线程有什么用

    超线程有什么用

    超线程是可以提升cpu使用效率的。在程序支持的复情况下性能提升明显,最多30%的性制能提升。超线程技术把多线程处理器内部的两个逻辑内核模拟成两个物理芯片,让单个处理器就能使用线程级的并行计算,进而兼容多线程操作系统和软件。超线程是可以提升...

  • 超线程是什么

    超线程是什么

    超线程技术把多线程处理器内部的两个逻辑内核模拟成两个物理芯片,让单个处理器就能使用线程级的并行计算,进而兼容多线程操作系统和软件。超线程技术充分利用空闲CPU资源,在相同时间内完成更多工作。超线程(HT,Hyper-Threading...

  • 多线程是什么

    多线程是什么

    多线程是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。具有这种能力的系统包括对称多处理机、多核心处理器以及芯片级多处理或同时多线程处理器。多线程(英语...

  • 线程间通信的方式有哪些,线程间通信的几种方式

    线程间通信的方式有哪些,线程间通信的几种方式

    线程间通信的方式有哪些,线程间通信的几种方式一、使用同一个共享变量控制Synchronized、wait、notifypublicclassDemo1{ privatefinalListLock、ConditionpublicclassT...

  • 进程线程的关系和优缺点是什么

    进程线程的关系和优缺点是什么

    进程线程的关系和优缺点是什么 进程和线程的区别是什么?有什么关系?相信大家对于进程都很熟悉了吧,而线程相对于进程而言,是一个更加接近于执行体的概念,为了让大家更好的了解进程和线程,下面给大家介绍进程和线程的区别和联系。进程和线程的区别...

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

    线程和进程的区别是什么 线程和进程的区别介绍

    了解计算机的朋友相信对于线程和进程都比较了解,总的来说它们就像是孪生兄弟一样,让我们分不清哪个是干什么用的。其实它们各自有各自的定义,在计算机运行上,它们也是有各自的区别的。那么线程和进程的区别究竟在哪里呢?下面就让小编来仔细的讲解一下。...

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

精彩推荐