多线程经典面试题总结

第一题:线程的基本概念、线程的基本状态及状态之间的关系?

  线程是cpu使用的基本单元,它由线程ID、程序计数器、寄存器集合和堆栈组成。它与属于同一进程的其他线程共享其代码段、数据段和其他操作系统资源(操作系统概念第七版)。是运行在进程上下文的逻辑流(深入理解计算机系统)。

   线程四种状态:新生状态、可运行状态、被阻塞状态、死亡状态

    

第二题:线程与进程的区别?

  1、 线程是进程的一部分,所以线程有的时候被称为是轻权进程或者轻量级进程。
  2、 一个没有线程的进程是可以被看作单线程的,如果一个进程内拥有多个进程,进程的执行过程   不是一条线(线程)的,而是多条线(线程)共同完成的。
  3、 系统在运行的时候会为每个进程分配不同的内存区域,但是不会为线程分配内存(线程所使用 的资源是它所属的进程的资源),线程组只能共享资源。那就是说,出了CPU之外(线程在运行的时候要占用CPU资源),计算机内部的软硬件资源的分配与线程无关,线程只能共享它所属进程的资源。
资源分配的最小单位是进程,线程只能共享所在进程的资源,但线程在运行中的不可或缺的资源(寄存器组,程序计数器,栈)。
  4、 与进程的控制表PCB相似,线程也有自己的控制表TCB,但是TCB中所保存的线程状态比PCB表中少多了。
  5、 进程是系统所有资源分配时候的一个基本单位,拥有一个完整的虚拟空间地址,并不依赖线程而独立存在。

第四题:多线程同步和互斥有几种实现方法,都是什么?

     临界区,互斥量,信号量,事件。

        1、临界区(同一个进程内):通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。 
        2、互斥量(可以跨进程,实现互斥):为协调共同对一个共享资源的单独访问而设计的。 
        3、信号量(可以跨进程,实现同步):为控制一个具有有限数量用户资源而设计。 
        4、事 件(可以跨进程,实现同步):用来通知线程有一些事件已发生,从而启动后继任务的开始。

第五题:多线程同步和互斥有何异同,在什么情况下分别使用他们?举例说明。

    线程同步是指线程之间所具有的一种制约关系,一个线程的执行依赖另一个线程的消息,当它没有得到另一个线程的消息时应等待,直到消息到达时才被唤醒。

    线程互斥是指对于共享的进程系统资源,在各单个线程访问时的排它性。当有若干个线程都要使用某一共享资源时,任何时刻最多只允许一个线程去使用,其它要使用该资源的线程必须等待,直到占用资源者释放该资源。线程互斥可以看成是一种特殊的线程同步(下文统称为同步)。

第六题:线程的三种实现模型(《Linux高性能服务器编程》)

内核线程(轻量级进程)M,用户线程N,M<=N,根据M和N的比值,按照M和N的比值可分为以下三种模型:

  1.完全在用户空间实现(N=1):优点,无需内核干涉,速度快且不占用额外内核资源。缺点:对于多处理器系统,同一进程的多个线程无法运行在不同的cpu中,因为内核按照进程分配cpu(注意:Linux内核的最小调度单位是进程,因为因为只有进程才拥有一个独立的上下文环境,也是分配系统资源的最小单位,内核按进程分配cpu,cpu的最小调度单位是线程。)

 2.完全在内核调度。优缺点与完全在用户空间实现相反。

 3.双层调度方式:结合前两种的优点,充分利用了多处理器的优势。


你可能感兴趣的:(后台/Linux/网络编程)