zoukankan      html  css  js  c++  java
  • 进程和线程的区别

    此问题也是面试中的一大俗题,可以发散引申出很多。下面记录几点关键点。

    1.进程是操作系统资源分配的最小单位,线程是CPU调度的最小单位(后半句是因为多线程的OS中,进程不是一个可执行的实体)。

    2.线程是依附于进程,比进程的创建销毁切换都更省资源,所以多线程的程序有更好的并发。

    这里有可能被追着问到线程和进程都包括哪些信息

    2.1 进程的PCB(进程控制块)

    包括进程ID,内存指针,寄存器,状态,优先级,程序计数器,IO状态信息。

      这里可能会被问到具体的进程状态,一共五种。新建,就绪,执行,阻塞,退出。

    2.1.1.进程的三种基本状态:就绪状态,执行状态,阻塞状态。

    2.1.2.进程三种状态间的转换

     (1) 就绪→执行 当前运行进程阻塞,调度程序选一个优先权最高的进程占有处理机;

     (2) 执行→就绪 当前运行进程时间片用完;

     (3) 执行→阻塞 当前运行进程等待键盘输入,进入了睡眠状态。

     (4) 阻塞→就绪 I/O操作完成,被中断处理程序唤醒。

    2.2 线程信息包括堆栈,局部变量,程序计数器

    2.2.1 线程状态:以JAVA线程的状态为例,将阻塞状态进行了扩展,包括:阻塞等待(线程执行了wait()),同步阻塞(线程尝试进入synchronized方法内受保护的区域,但是没有获得同步锁)

       

    3.进程间的crash不会相互影响,但是一个线程的crash会使整个进程都crash,其他线程也跟着都挂了。

    4.线程间的通信是通过进程中共享的全局变量,不需要通过系统调用就可以通信,更加高效。

    4.1 这里八成会被引申出进程间通信的方式

    管道消息队列共享内存信号量,套接字 如果再往下具体,就看具体链接吧。不过再往后面就太发散了。

    4.2 线程间的同步于互斥(也勉强算是线程间的一种通信吧)---同步:线程间按顺序执行,同步肯定是基于互斥的,是一种更复杂的互斥;互斥:一个线程执行的时候,其他线程要等待。

    4.2.1 临界区,只有一个线程可以执行的代码块。用于互斥操作。在JAVA中就是synchronized(object){//code}一段代码块。

    4.2.2 互斥量,一个二元信号,只有拿到锁和释放锁两种状态。也只用于互斥操作。类似于JAVA中的LOCK对象,他可以实现临界区的所有功能,比临界区更加灵活,可以自己定义什么时候释放锁。

    4.2.3 信号量,一个资源计数器,取资源的时候,如果没有了就需要等待。JAVA中有Semaphore对象,初始化资源数量后,有acquire和release方法。

    4.2.4. 事件,用来通知线程有一些事件已发生,从而启动后继任务的开始。好像没怎么听过=。=

  • 相关阅读:
    第2章 面向对象的设计原则(SOLID):5_迪米特法则
    第2章 面向对象的设计原则(SOLID):4_接口隔离原则(ISP)
    第2章 面向对象的设计原则(SOLID):3_依赖倒置原则(DIP)
    第2章 面向对象的设计原则(SOLID):1_单一职责原则(SRP)
    第1章 UML基础:类的关系
    将DHT11移植到Linux系统上(转)
    Linux下用文件IO的方式操作GPIO(/sys/class/gpio)(转)
    asm335x系列adc和触摸屏驱动(转)
    (原创)AP6212蓝牙模块在am335x控制板上的应用
    Am335x 下GPIO控制实例-驱动程序(转)
  • 原文地址:https://www.cnblogs.com/23lalala/p/3576752.html
Copyright © 2011-2022 走看看