zoukankan      html  css  js  c++  java
  • 线程

    一、认识线程

    1.线程的引入

    多道程序管理:追求效率的目的下实现“并发”

    利用进程实现的多道程序系统中

    进程是一个可拥有资源的独立单位;

    是一个可独立调度和分派资源的基本单位

    有如下频繁操作:创建进程、撤销进程、进程切换

        PCB信息,CPU环境的管理等付出不少时空开销,尤其在进程切换上。

    所以并发程度不是随意设定的:

    并发进程数量不宜过多,切换频率不宜过高。

    限制并发程度问题所在:进程实体信息量大,对进程的管理操作越多,与运行时间的比值就越大,运行效率就低。

    怎样进一步提高并发效率,节约时空开销?     

    以进程为单位分配资源

    将进程划分为多个功能单位调度执行。

    多线程系统中,同一个进程中的多个线程

    共享进程资源

    可并发执行

    2.线程的属性

    多线程OS中,一个进程包括多个线程,每个线程都是利用CPU的基本单位。

    轻型实体:只需一点必不可少的、能保证独立运行的资源。(TCB)

    独立调度和分派的基本单位:调度切换迅速且开销小。

    可并发执行

    共享进程资源:同进程中的线程可共享相同的进程地址空间、已打开文件、信号量机构等。

    3.线程的信息

    状态参数

    标识符、运行状态、优先级、寄存器状态、堆栈、专有存储器、信号屏蔽等。

    运行状态

    执行、就绪、阻塞

    4. 线程的创建和终止

    在多线程OS中,应用程序启动时,通常只有一个线程(初始化线程)在执行,它根据需要再创建若干线程。

    5.多线程系统中的进程

    进程只是用于分配系统资源

    包括多个线程

    不是执行实体,线程在进程范围内作为执行实体。

    * 线程与进程的比较

    调度:线程作为CPU调度的基本单位,而进程只作为其它资源分配单位。

    并发性:进程之间可以并发,实质上是不同进程中的两个线程并发。一个进程的多个线程之间亦可并发。

    拥有资源:进程间资源相互独立;同一进程的各线程间共享。某进程内的线程在其它进程不可见

    系统开销:线程上下文切换在同进程环境下上下文切换要快得多。因为同进程内线程间共享内存地址和打开的文件资源;

    6.线程的管理

    同步和通信机制

    1)互斥锁

    比较简单的,控制线程互斥访问资源;

    适用于高频度使用的关键共享数据和程序段;

    unlock和lock两个锁操作原语;

    2)条件变量

    与互斥锁一起使用

    锁保证互斥进入临界区,但利用条件变量使线程阻塞

    注意不满足条件时,wait条件变量:

    释放互斥锁

    进程阻塞在条件变量指向队列中

    被唤醒后要重新再设互斥锁

    3)信号量

    私用信号量(private samephore)

    用于同进程的线程间同步,数据结构存放在应用程序的地址空间。属于特定进程,OS感知不到其存在。

    公用信号量(public samephore)

    用于不同进程间或不同进程中线程的同步,数据结构由OS管理,存放在受保护的系统存储区。

    互斥锁是为了上锁而优化的;条件变量是为了等待而优化的;信号灯即可用于上锁,也可用于等待,因而可能导致更多的开销和更高的复杂性。

    三种机制适用逐渐复杂的同步情况

    二、线程的实现方式

     

    1.内核线程KST(kernel-level thread)

    依赖于内核,利用系统调用由OS内核在内核空间完成创建、撤消、切换等线程工作。时间片分配给线程,所以多线程的进程获得更多CPU时间。

    2.用户线程ULT(user-level thread)

    无须利用系统调用,不依赖于OS核心。进程利用线程库函数创建、同步、调度和管理控制用户线程。调度由应用软件内部进行,通常采用非抢先式和更简单的规则,也无需用户态/核心态切换,速度比kst快。

    3.组合方式

    内核支持多KST线程的管理,同时也允许用户应用程序级的线程管理。

    用户级线程需借助某种形式的中间系统取得内核服务,用户程序复杂

    运行时系统:管理和控制线程的函数/过程集合。

    内核控制线程,轻型进程LWP

    1、Runtime System

    2、轻权进程(LightWeight Process)

  • 相关阅读:
    0309. Best Time to Buy and Sell Stock with Cooldown (M)
    0621. Task Scheduler (M)
    0106. Construct Binary Tree from Inorder and Postorder Traversal (M)
    0258. Add Digits (E)
    0154. Find Minimum in Rotated Sorted Array II (H)
    0797. All Paths From Source to Target (M)
    0260. Single Number III (M)
    0072. Edit Distance (H)
    0103. Binary Tree Zigzag Level Order Traversal (M)
    0312. Burst Balloons (H)
  • 原文地址:https://www.cnblogs.com/Kirino1/p/10027280.html
Copyright © 2011-2022 走看看