多线程:包括线程概念/线程控制/线程安全/线程基本应用
多任务处理:多创建几个进程,一个进程就有一个pcb,能够串行化的完成一个任务,在一个进程中多创建几个pcb,pcb是调度程序运行的描述,有多少个pcb就有多少个执行流程,
什么是线程?
线程是一个进程内部的控制序列,线程是进程中的一条执行流,在linux下通过pcb实现,因此实际上linux下的线程就是一个pcb,并且linux下的pcb共用一个虚拟地址空间,相较于传统pcb更加轻量化,也被称之为轻量级进程。
多线程是同时处理,只有一个虚拟地址空间,多进程各有各的虚拟地址空间和执行代码段。
进程是操作系统资源分配的基本单位;(操作系统会为一个程序的运行分配所需的所有资源)
线程是cpu调度的基本单位。
linux下的进程其实是一个线程组,一个进程中可以有多个线程(多个pcb),线程是进程中的一条执行流。一个进程中至少会有一个线程。
创建线程会伴随在内核中创建一个pcb来实现程序的调度,作为进程中的一条执行流。
进程就是多个线程的一个合集,并且这个进程中的所有pcb共用进程中的大部分资源(程序运行时,操作系统为程序运行所分配的所有资源)。
线程之间的独有与共享:
独有:标识符,寄存器,信号屏蔽字,优先级。
共享:虚拟地址空间(代码段/数据段),文件描述符表(IO信息),信号处理的回调函数(SIG_IGN忽略、SIG_DFL默认或自定义),当前工作目录,用户id和组id。
为什么信号是先注销,再处理?
信号时针对整个进程通知事件进行处理的,但是一个信号只需要被处理一次就够了,然而一个进程会有多个执行流,到底谁处理这个事件(谁拿到时间片,谁就能处理),有的线程不希望操作被打断,就可以屏蔽这个信号。
使用vfork创建一个子进程;父子进程共用同一个虚拟地址空间,但是父进程会阻塞(父进程阻塞的原因是防止调用栈紊乱,数据紊乱)直到子进程exit或者程序替换;
fork(写时拷贝,修改的时候开辟空间)不仅会