Linux(八)线程概念

1、线程的本质

线程就是一个进程内部的控制序列

是CPU进行执行调度的基本单元。(调度一段代码的执行是通过线程完成的)

一个进程中至少有一个线程(所以进程与线程的数量关系是 一对一 或 一对多)

2、为什么把线程称为LWP

LWP——轻量级进程,在Linux下进程是资源分配的基本单位,线程是进行资源调度的基本单位,而线程使用进程pcb描述实现,并且同一个进程中的所有线程共用同一个虚拟地址空间,所以称线程为轻量级的进程

3、什么是多线程?什么是多进程?

假设有一个工厂老板改变自己的厂子规模

多进程:

        多建几个厂:但是资源消耗大,更稳定(shell、网络服务器)

多线程:

        在一家厂里多拉几条生产线:资源消耗小,但健壮性不如多进程


Linux(八)线程概念_第1张图片

 在比如说:有一个任务序列,里面需要执行ABC三个操作

多进程:多进程就是把多个任务分成多个程序,一个进程执行一个,每个进程都有其自己的虚拟地址空间,然后映射到其对应的任务上。

Linux(八)线程概念_第2张图片

 多线程:把一个任务分成多个模块,一个pcb调度其中一个模块

Linux(八)线程概念_第3张图片

4、进程与线程的区别

本质层面的理解区别:

    进程是系统资源分配的基本单位(每运行一个程序,操作系统就要分配一次程序运行所需资源)

    线程是资源调度的基本单位,在linux下是通过pcb实现的,一个进程中可以有多个pcb,

    因此也被称为轻量级进程

多进程与多线程在多任务处理的优缺点

        多进程:健壮、稳定

        多线程:

                1、线程通信之间更加灵活(共享虚拟地址空间)

                2、创建和销毁成本更低(线程之间很多资源都是共享的,所以创建一个线程并不需要分配太多资源)

                3、同进程的线程间调度成本更低(cpu上加载的块表信息,页表指针等都不需要替换)

使用场景:对于程序的安全性要求大于性能和资源要求的选择多进程(shell),其他则多线程。

安全性(每个进程都有其独立的虚拟地址空间,有独立资源,具有独立性)

5、线程的独有与共享

多个线程在同一个进程中运行不会发生混乱

1)每个线程调度执行的就是一个函数

2)将所有可能产生混乱的内容单独整一份

线程之间共享信息:

        虚拟地址空间、堆区共用、文件描述表、信号处理方式、工作路径、用户ID、组ID

线程之间独有信息:

        标识符、栈区、上下文数据、信号屏蔽字、errno……

以栈混乱为例:假如只有一个栈,同一个进程的不同线程执行不同的功能时,线程1执行memcpy,线程2执行printf,接着线程1完成功能将要退出了,进行出栈操作,却把别的线程的功能函数给出栈了,这就发生了栈混乱,所以为了避免我们给每个进程都分配了其自己的栈,这样就不会相互之间产生栈混乱。

Linux(八)线程概念_第4张图片

 Linux(八)线程概念_第5张图片

你可能感兴趣的:(LInux,jvm)