线程和进程的理解

Author Avatar
高翔 3月 07, 2017

被阿里暴躁的面试官哥哥问到,瞬间原地爆炸

背景

对于CPU,它需要把所有的任务(程序)一个个轮流执行,具体轮流的方法:先加载程序A的上下文,然后开始执行A,保存程序A的上下文,调入下一个要执行的程序B的程序上下文,然后开始执行B,保存程序B的上下文。。。。

进程

进程就是包换上下文切换的程序执行时间总和 = CPU加载上下文+CPU执行+CPU保存上下文


所以,进程可以说是上面定义的这个时间段,也可以认为是程序执行时,系统进行资源分配的一个实体。因为有上下文的限制,一个进程一般无法访问另一个进程的资源。

线程

某一个程序A(线程)得到cpu的时候,便加载A的上下文,但是A里面不止一个任务啊:当你打开qq,你一边和小红在视频聊天,一边还能收到小丽给你发来的消息。所以每个程序(进程)分为多个程序小段,这里的每个小段代表一个线程
但是这里的每一个小段都是属于A程序的,他们共用了A的上下文。

总结来说:

  • 线程和进程都是一个晓得程序,也都可以说成是一个时间段的描述。
  • 一个进程可以拥有多个线程,每个线程使用其所属进程的栈空间。
  • 线程与进程的一个主要区别是,同一进程内的多个线程会共享部分状态, 多个线程可以读写同一块内存(一个进程无法直接访问另一进程的内存)。
  • 同时, 每个线程还拥有自己的寄存器和栈,其它线程可以读写这些栈内存。

待更新:

  • 进程调度算法
    • 先来先服务和短作业(进程)优先调度算法
    • 高优先权优先调度算法
    • 基于时间片的轮转调度算法
  • Windows内存管理的方式(块式、页式、段式、段页式).
  • 死锁的概念,导致死锁的原因,导致死锁的四个必要条件,预防死锁的方法、避免死锁的方法
  • 内存池、进程池、线程池。
  • 进程通信的几种方式
    • 管道通信
    • 信号
    • 报文队列
    • 共享内存
    • 信号量
    • 套接口