目录
线程概念,轻量级进程,线程的独有与共享
线程概念:线程是进程中的一条执行流程
轻量级进程:在一部分操作系统的概念中,进程是只有一个线程/轻量级进程的进程,系统为每个进程分配了一个pcb(进程控制块),是一个task_struct结构体,其中包含了很多描述信息实现操作系统对程序运行的管理和调度。 而在Linux中,线程是进程中的一条执行流程,是CPU调度的基本单元,但因为linux下执行流是通过pcb实现的,也就是说一个进程中可以有多个执行流pcb,并且这些pcb还共享了很多程序运行所需资源,因此linux下的pcb就起了一个新名字——轻量级进程。
线程之间的独有与共享
共享:
虚拟地址空间(便于线程之间通信)
信号处理方式(都能收到,谁拿到时间片谁处理)
IO信息(共享文件描述信息)
工作路径(创在同一个地方)
独有:
栈 ——vfork(), 创建出来后父进程会阻塞,直到子进程退出,原因是他们共享了同一个虚拟地址空间,也就是说用同一个栈。
寄存器(因为涉及到切换调度,需要知道上次运行到的位置,可以说是上下文数据)
errno(一个线程出现问题,一个线程成功完成,如果共用,那么就会变成两个线程都成功完成)
信号屏蔽器
进程与线程
进程与线程的区别:
1.进程是操作系统进行资源分配的基本单元
2.线程是操作系统进行cpu调度的基本单元
进程和线程在创建时的区别:
fork() , 创建新的虚拟地址和新的资源空间
create_thread() , 创建pcb, 新的虚拟地址空间,指向同一片资源
多进程与多线程在多任务处理中的优缺点:
多线程:
1.线程间通信非常灵活(包含进程间通信方式在内,全局,传参)
2.线程的创建与销毁成本更低,因为线程资源大多共享
3.线程间的切换调度成本低
多进程:
1.独立性高,稳定性强(一个线程出错导致整个进程退出)
多进程与多线程的共同优点
也就是多任务使用多执行流处理的优点
CPU密集型程序:程序中几乎都是CPU数据运算,那么这种程序可以更好利用多核CPU资源,但CPU也不是越多越好,否则会增加切换调度成本。
IO密集型程序:程序中几乎都是IO操作,分为等待IO就绪和数据拷贝过程,同时操作可以重叠等待时间。