zoukankan      html  css  js  c++  java
  • 线程简单介绍

    一. 什么是线程
        在一个程序里的一个运行路线就叫做线程(thread).更准确的定义是:线程是"一个进程内部的控制序列"
        一切进程至少都有一个运行线程.

    二. 进程与线程
        进程是资源竞争的基本单位
        线程是程序运行的对小单位
        线程共享进程数据,但也拥有自己的一部分数据

            线程ID
            一组寄存器
            栈
            errno
            信号状态
            优先级

    三. fork 和创建新线程的差别
        当一个进程运行一个fork调用的时候,会创建出进程的一个新拷贝,新进程将拥有它自己的变量和它的自己的PID.
    这个新进程的执行时间是独立,它在执行时差点儿全然独立创建它的进程.
        在进程里面创建一个新线程的时候,新的运行线程会拥有自己的堆栈(因此也就有自己的局部变量),但要与它的创建者共享全局变量,文件描写叙述符,信号处理器和当前的工作文件夹状态
    .

    四. 线程的长处
        (1) 创建一个新线程的代价要比创建一个新进程小的多
        (2) 与进程之间的切换相比,线程之间的切换须要操作系统做的工作要少的多
        (3) 线程占用的资源要比进程少的多
        (4) 能充分利用多处理器的可并行数量
        (5) 在等待慢速I/O操作结束的同一时候,程序可运行其它的计算任务.
        (6) 计算密集型应用,为了能在多处理器系统上执行,将计算分解到多个线程中实现.
        (7) I/O密集型应用,为了提高性能,将I/O操作重叠.线程能够同一时候等待不同的I/O操作
    .
    五. 线程的缺点
        (1)等候使用共享资源时造成程序的执行速度变慢。这些共享资源主要是独占性的资源 ,如打印机等。

        (2)对线程进行管理要求额外的 CPU开销。

    线程的使用会给系统带来上下文切换的额外负担。

    当这样的负担超过一定程度时,多线程的特点主要表如今其缺点上,比方用独立的线程来更新数组内每一个元素。



        (3)线程的死锁。

    即较长时间的等待或资源竞争以及死锁等多线程症状。

        (4)对公有变量的同一时候读或写。

    当多个线程须要对公有变量进行写操作时,后一个线程往往会改动掉前一个线程存放的数据,从而使前一个线程的參数被改动;另外 ,当公用变量的读写操作是非原子性时,在不同的机器上,中断时间的不确定性,会导致数据在一个线程内的操作产生错误,从而产生莫名其妙的错误,而这样的错误是程序猿无法预知的。
        
    六: 三种线程模型
        N:1 用户线程模型
        1:1 核心线程模型
        N:M 混合线程模型


         (1)N:1 用户线程模型

        "线程实现"建立在"进程控制"机制之上,由用户空间的程序库来管理. OS内核全然不知道线程信息.这些线程称为用户空间线程

        这些线程工作在"进程竞争范围"



        在N:1线程模型中,内核不干涉线程的不论什么生命活动,也不干涉同一进程中的线程环境切换.
        在N:1线程模型中,一个进程中的多个线程仅仅能调度到一个CPU,这样的约束限制了可用的并行总量.
        第二个缺点是假设某个线程运行了一个"堵塞式"操作(如read),那么,进程中的全部线程都会堵塞,直至那个操作结束.为此,一些线程的实现是为这些堵塞式函数提供包装器,用非堵塞版本号替换这些系统调用,以消除这样的限制.

        (2)1:1 核心线程模型
           在1:1 核心线程模型中,应用程序创建的每个线程都由一个核心线程直接管理
           OS内核将每个核心线程都调用到系统CPU上,因此,全部线程都工作在"系统竞争范围".
           这样的线程的创建与调度由内核完毕,由于这样的线程的系统开销比較大(但一般比进程开销小)

        (3)N:M 混合线程模型
        N:M混合线程模型提供了两级控制,将用户线程映射为系统的可调度以实现并行,这个可调度称为轻量级进程(LWP:light weight process),LWP 再一一映射到核心线程.


       

        
      
  • 相关阅读:
    UVA
    UVA
    模板——扩展欧几里得算法(求ax+by=gcd的解)
    UVA
    模板——2.2 素数筛选和合数分解
    模板——素数筛选
    Educational Codeforces Round 46 (Rated for Div. 2)
    Educational Codeforces Round 46 (Rated for Div. 2) E. We Need More Bosses
    Educational Codeforces Round 46 (Rated for Div. 2) D. Yet Another Problem On a Subsequence
    Educational Codeforces Round 46 (Rated for Div. 2) C. Covered Points Count
  • 原文地址:https://www.cnblogs.com/yutingliuyl/p/6898898.html
Copyright © 2011-2022 走看看