linux线程剖析(Part1)—1个“假“的tcb

zz/2024/2/25 6:46:23

linux的“假”线程


先说一句废话:线程是在进程内部运行的一个执行分支

这是现在大多数计算机书籍对线程概念的描述。然而,对大多数人来说(比如我),仍然不(yi)知(lian)所(meng)云(bi)。

为了深刻理解这句话背后的含义,我们先来看一张图:

1

我们知道,vfork函数是用来创建子进程的。且该函数创建出的子进程与父进程共用一个地址空间。

所以,可以将父进程中的代码和函数分解,并分别交给这些子进程并行执行。这种方式相较于普通进程执行的方案更为高效。

事实上,我们可以将这些子进程看作线程,而把上图中的father和child统称为一个进程。这样,我们就可以知道线程在进程和OS中扮演的角色。

那为什么说linux的线程是“假”的呢?

这是因为在linux中,线程和进程共用了一种数据结构(task_struct)。也就是说,linux并没有为线程设计另外的数据结构。linux中的线程是由进程模拟的。所以,linux中没有真正意义上的线程,相当于“假”的线程。

注:windows操作系统中,线程就是真正意义上的线


http://www.ngui.cc/zz/2689571.html

相关文章

线程剖析(part2)—线程控制及线程属性

前言 在博主的上一篇博客中讲述了线程的基本概念及线程创建,没有看过的小伙伴可以点击这里: linux线程剖析(part1)—1个“假”的tcb 本篇博文将重点从两个方面:线程控制(线程等待、线程终止)及线程属性来…

shell脚本初探——概念篇

ForeWord 本文介绍了shell脚本的一些基础知识。 Key Point: Shell概念及发展历史shell执行脚本shell变量Shell特殊字符使用( $() [] [[]]等) tips:全文阅读需8minPart1:Concept&History 1. Concept 1.Shell概念 我们知道&#xff…

输出1到5的阶乘值(静态变量)

#include <stdio.h> #include <conio.h> int main(){ int fac(int n); int i; for(i1;i<5;i) printf("%d!%d\n",i,fac(i)); getch(); return 0; } int fac(int n){ static int f1; ff*n; return f; }

图-笔记

1.若E是有向边&#xff08;也称为弧&#xff09;的有限集合时&#xff0c;则图G为有向图&#xff1b;若E是无向边&#xff08;简称边&#xff09;的有限集合时&#xff0c;则图G为无向图。 2.有n(n-1)/2条边的无向图称为完全图&#xff0c;具有n(n-1)条弧的有向图称为有向完全…

《计算机网络》-数据链路层笔记及部分课后习题

第三章 3-1.数据链路(即逻辑链路)与链路(即物理链路)有何区别? “电路接通了”与”数据链路接通了”的区别何在? 答&#xff1a;数据链路与链路的区别在于数据链路出链路外&#xff0c;还必须有一些必要的规程来控制数据的传输&#xff0c;因此&#xff0c;数据链路比链路多…