zoukankan      html  css  js  c++  java
  • 操作系统线程基本概念

      1、什么是线程?

      简单来说,我们知道一个进程就是一段程序的执行,但是一段程序可以实现很多功能,而我们可以简单的认为,每一个功能就是一个线程,线程就是进程内执行的任务。一个进程内部可以有很多的线程。线程是CPU使用的基本单元,它由线程ID、程序计数器、寄存器集合和栈组成。它与属于同一进程的其他线程共享代码段、数据段和其他操作系统资源。

      2、多线程的优点;

      (1)响应度高:如果对一个交互程序采用多线程,即使有部分线程阻塞或执行冗长的操作,该程序也能继续执行,从而增加对用户的相应程度

      (2)资源共享:多线程默认共享他们所属进程的内存和资源

      (3)经济:进程创建所需要的内存和资源的分配比较昂贵,由于线程能够共享他们的进程的资源,所以创建线程比进程经济;

      (4)多处理器体系结构的利用:多线程的优点是充分利用多处理器体系结构,以便每个进程能够并行运行在不同的处理器上。

      3、多线程的模型:

      有两种不同的方式来提供线程支持:用户层的用户线程和内核层的内核线程,根绝内核线程和用户线程的对应关系,多线程的模型可以分为三种:

      (1)多对一模型:

      就是将多用户线程映射到一个内核线程,线程管理是在用户空间进行的,因而效率比较高,但是如果一个线程阻塞,那么整个进程就会阻塞,因为任意时刻只有一个线程访问内核,所以多个线程并不能运行在多处理器上;

      (2)一对一模型:

      将每个用户线程映射到一个内核线程上,该模型在一个线程执行阻塞系统调用时,能允许另一个线程继续执行,所以效率比多对一模型高;

      (3)多对多模型:

      允许多个用户线程复用一个内核线程,也允许一个用户线程专用一个内核线程,这称为“二级模型”,效率比上面两种模型都高,但是相对的,实现也更加困难。

      4、多线程的问题:

      (1)fork()和exec()函数问题

      unix系统有两种形式的fork(),一种是复制所有的线程,另外一种是只复制调用了系统fork()函数的线程。

      调用了exec()函数之后,exec()参数指定的程序会替换整个进程。

      (2)线程取消:

      要取消的线程我们成为目标线程,主要由两种方式:

      (1)异步取消:一个线程立即终止目标线程

      (2)延迟取消:目标线程不断检查它是都应终止,这允许目标线程有机会以有序方式来终止自己。

      

      

  • 相关阅读:
    2015年秋季阅读计划
    课程改进意见
    第二阶段冲刺站立会议报告四
    第二阶段冲刺站立会议报告三(补)
    第二阶段冲刺站立会议报告二(补)
    第二阶段冲刺站立会议报告一(补)
    第一阶段冲刺站立会议报告四(补)
    第一阶段冲刺站立会议报告三(补)
    第一阶段冲刺站立会议报告二(补)
    第一阶段冲刺站立会议报告一(补)
  • 原文地址:https://www.cnblogs.com/PIRATE-JFZHOU/p/8087924.html
Copyright © 2011-2022 走看看