进程与线程

来源:互联网 发布:安卓改头像软件图片 编辑:程序博客网 时间:2024/06/01 17:49

进程与线程

进程是用开飞陪系统资源的,进程包含多个线程,一个进程的启动包含主线程的启动

了解概念

cpu好比一个工厂,每个车间是一个进程,车间里面的工人是线程

一个进程的内存空间是共享的,每个线程都可以使用这些共享的内存,特别的:某些内存空间,当一个线程使用时,其他线程必须等待它结束,才能使用这块内存,这就需要加“互斥锁”(Mutex),防止多个线程同时读写某一块内存区域;某些内存空间,可以提供给固定数目的线程使用,这时候需要“信号量”(Semaphore),用来保证多个线程不会互相冲突,Mutex 是 Semaphore 的 一种特殊情况。

操作系统的设计,可以归结为三点

  1. 以多进程形式,允许多个任务同时执行;
  2. 以多线程形式,允许单个任务分成不同的部分运行;
  3. 提供协调机制,一方面阻止进程之间和线程之间产生冲突,另一方面允许进程之间和线程之间共享资源;

命令相当于进程 进程间可以进行通讯(通讯机制)
实现进程之间的通讯方法:管道通讯 、socket套节字、 信号 、消息队列

进程(process)

终端下对进程的操作:(需要包含头文件unistd.h)(简称few)

  1. fork 创建一个新的子进程(通过系统调用流程,由内核来完成创建) 返回进程ID
    (返回0代表子进程,返回1代表父进程,返回值 <0 代表出现错误)
  2. getpid : 获取当前进程的id
  3. gitppid : 获取父进程的id
  4. exec : (把进程中的文本段进行替换)在进程中调用别的程序或命令
  5. wait 收尸 进程结束后,父进程要对子进程收尸,保证资源不会被浪费掉,一般父进程会晚于子进程挂掉 (结束状态为0表示正常退出)
  6. sleep(100); :不让进程结束

进程与进程之间的内存空间是彼此独立的,父进程与子进程刚开始创建的时候公用数据,但是一旦创建了,就会彼此独立,子进程是被父进程创建的。

防御式编程,先把错误的情况写出来

!狭义的定义:进程就是一段程序的执行过程

广义的定义:具有独立功能的程序对某个数据集合的一次运行活动,是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元

主要两点:

第一、进程是一个实体 包括文本区域、数据区域、堆栈

  1. 文本区域(text region):存储处理器执行的代码
  2. 数据区域(data region):存储变量和动态分配的内存
  3. 堆栈区域(stack region):存储着活动过程中调用的指令和本地变量

第二、进程是一个“执行中的程序”

进程的缺点

  1. 不同的进程之间共享状态信息困难 (需要显式的使用)
  2. 进程之间通讯比较慢

线程

这里写图片描述

这里写图片描述

线程是一个独立的执行单元

cpu通过优先级和时间片对多个线程进行控制,有一些调度算法,来切换线程。

线程中没有父子关系

线程之间的切换,需要开销时间,但是很小。

0 0
原创粉丝点击