进程:
是计算机中关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。早期计算机结构面向进程设计,进程是程序的基本执行实体;当代计算机结构面向线程设计,进程是线程的容器。
进程间通信:Linux C编程中有几种方法:
(1)双办公Unix管道
(2)FIFOs(命名管道)
(3)消息队列
(4)信号量
(5)共享内存
(6)网络Socket
进程内存空间:由进程控制块、程序段、数据段三部分组成。
线程:
线程是操作系统进行运算调度的最小单位,包含在进程之间,是进程中的实际运作单位。
线程是独立调度和分配的基本单位,线程有操作系统内核调度的内核线程,由用户进程自行调度的用户线程,还有内核与用户进程进行混合调度的线程。
线程内存空间:同一进程中的多条线程共享该进程中的全部系统资源,如虚拟地址空间、文件描述符、信号处理等;但每个线程有各自的调用栈、寄存器环境、线程本地存储。
线程的主体由程序、数据、TCB(线程控制块)组成。
线程同步的方式:多线程的同步与互斥(互斥锁、条件变量、读写锁、自旋锁、信号量)_青萍之末的博客-CSDN博客_线程互斥锁
线程间互相通信:由于同一个进程内的线程共享内存和文件,所以线程之间通信不必调用内核。
可以直接读写进程数据段(如全局变量)来进行通信。
死锁的四个必要条件:
不可抢占:进程使用中的资源不能强行抢占
资源互斥:一个资源每次只能被一个进程使用
请求与保持:一个进程因得不到请求的资源而阻塞的时候,对已获得的资源保持不放。
循环等待:若干进程之间形成一种头尾相接的循环等待资源关系。
如何避免死锁:
资源使用后立即释放;
设置线程优先级,使优先级高的进程可抢占优先级低的进程的资源;
一次性分配方案:要么不给进程分配资源,要么对进程所需的全部资源一次性分配。
若对资源的请求被拒绝,则必须释放其先前占有的资源;
将系统中的所有资源同一编号,进程的资源申请必须按资源的编号顺序提出;
银行家算法:银行家算法_wenlijunliujuan的专栏-CSDN博客_银行家算法;
增加资源申请时限;
线程池:Java相关概念