进程和线程

来源:互联网 发布:热血无赖mac存档位置 编辑:程序博客网 时间:2024/06/02 00:00

进程

进程状态

  1. 就绪状态,进程已分配到除CPU以外的所有资源,通常有多个,成为就绪队列;
  2. 执行状态,分配到CPU,正在执行,在单处理机上只有一个进程处于执行状态,多处理机上,有多个进程处于执行状态;
  3. 阻塞状态,正在执行的进程因某事件而暂时无法继续执行,便放弃处理机而处于暂停状态,例如IO请求,申请缓冲空间。,根据阻塞原因将其分为不同队列

进程生命周期切换

  1. 创建 到 就绪
  2. 就绪 到 执行
  3. 执行 到 阻塞
  4. 执行 到 就绪
    这里写图片描述

进程同步方式

信号量机制

进程通信

通信类型

1.共享存储器系统

临界缓冲区
共享存储器

2.消息传递系统

最为广泛,进程间的数据交互是以格式化的消息为单位的。

3.管道通信系统

  1. 互斥:只能有一个进程对pipe进行读写操作
  2. 同步:当写进程写完后便去睡眠等待,直到读进程读完后将其唤醒
  3. 只有确定对方存在后才能进行通信

消息传递的通信方式

1.直接通信

发送方直接发送消息,接收方直接接收消息

2.间接通信方式

需要通过共享的数据结构暂存消息

线程

1个进程至少有1个线程,线程相当于进程的不同执行分支,所以1个进程中的所有线程共享这个进程的代码段,数据,内存等所有系统资源,线程基本不拥有系统资源,除了一些比不可少的寄存器和堆栈数据等,所有切换线程的开销较小。

线程的创建

当应用程序启动时通常有一个线程在执行,即初始化线程,它可根据需要去创建若干个线程,创建线程时需要利用一个线程的创建函数并提供相应的参数:

  • 指向线程主程序的入口指针
  • 堆栈大小
  • 调用优先级

    创建函数执行完后返回一个线程标识符

线程通信机制

  • 互斥锁
  • 条件变量
    由于互斥锁会造成资源的循环等待而发生死锁:假设线程对mutex1执行关锁操作后进入临界区C,此时又需临界资源R,则为R设置一个互斥锁mutex2,若此时R正忙碌,则线程对mutex2执行关锁操作后必将阻塞,这样mutex1则一直无法释放,如果保持了R的线程要求进入临界区C,但由于mutex1一直关锁,所以两个资源互相等待形成死锁。

条件变量就是字需要R时R忙碌,则将R的互斥锁mutex2执行开锁,直到该资源被释放。
- 信号量机制

调度

进程是资源分配的基本单位,线程是调度的基本单位

并发性

同一个进程中的线程可并发执行共享进程的资源

系统开销

创建或撤销进程时系统都要为之创建和回收内存空间或者IO设备等,但是线程的切换仅需设置少量的寄存器内容,不涉及内存管理,所以,线程的切换代价远小于进程。

原创粉丝点击