Linux--线程与进程的总结

什么是进程?

进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。

什么是线程?

线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。

进程与线程

进程是资源竞争的基本单位
线程是程序执行的最小单位
线程共享进程数据,但也拥有自己的一部分数据

进程与线程的关系图

这里写图片描述

进程

进程的所有信息被放到进程控制块中(PCB),并由它维护管理相关信息。
在Linux中,这叫做task_struct。
task_struct是Linux内核的一种数据结构,它会被装载到RAM里并且包含着进程的信息。
每个进程都把它的信息放在 task_struct 这个数据结构里。可以在include/linux/sched.h 里找到它。

task_struct 包含了这些内容:
标示符 : 描述本进程的唯一标.示符,用来区别其他进程。
状态 :任务状态,退出代码,退出信号等。
优先级 :相对于其他进程的优先级。
程序计数器:程序中即将被执行的下一条指令的地址。
内存指针:包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针
上下文数据:进程执行时处理器的寄存器中的数据。
I/O状态信息:包括显.示的I/O请求,分配给进程的I/O设备和被进程使.用的文件列表。
记账信息:可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。

在Linux下并无真正的的线程,是用进程来模拟线程的

一个地址空间内部多个线程共享一下资源和环境:
1.文件描述符表
2.每种信号的处理方式
3.当前工作环境
4.用户id与组id
但是有些资源是每个线程各有一份的
1.线程id
2.上下文,包括各种寄存器的值,程序计数器和指针。
3.栈空间
4.信号屏蔽字
5.优先调度级

线程的优点

1.创建线程的代价比进程小得多
2.线程之间的切换需要系统做的工作少得多
3.线程占用的资源比进程少
4.能充分利用多处理器的可并行数量

进程的优点

1.健壮性:线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮。
2.编程难度低。

猜你喜欢

转载自blog.csdn.net/qq_37934101/article/details/80314284