zoukankan      html  css  js  c++  java
  • 多线程学习(一)

    多线程基础介绍

    多线程一词可以解释为多个控制线程或多个控制流。虽然传统的UNIX进程包含单个 控制线程,但多线程(multithreading,MT)会将一个进程分成许多执行线程,其中每个 线程都可独立运行

    定义多线程术语

    表1–1多线程术语
    术语 定义
    Process(进程) 通过fork(2)系统调用创建的UNIX环境(如文件描述符和用户 ID等),为运行程序而设置。 
    Thread(线程) 在进程上下文中执行的指令序列。 
    POSIX pthread 符合POSIX线程的线程接口。 
    Solaris thread(Solaris线程) 不符合POSIX线程的SunMicrosystemsTM线程接口,pthread的前 序节点。 
    single-threaded(单线程) 仅允许访问一个线程。 
    Multi threading(多线程) 允许访问两个或多个线程。
    User-levelorApplication-level thread(用户级线程或应用程序 级线程)

    在用户空间(而非内核空间)中由线程调度例程管理的线程。

    Lightweight process(轻量进程) 用来执行内核代码和系统调用的内核线程,又称作LWP。从 Solaris9开始,每个线程都有一个专用的LWP。 

    Bound thread(绑定线程)(过 时的术语)

    指的是在Solaris9之前,和一个LWP 永久绑定的用户级线程。从 Solaris9开始,每个线程都有一个专用的LWP。

    Unbound thread(非绑定线程) (过时的术语)

    指的是在Solaris9之前,无须和一个LWP 绑定的用户级线程。从 Solaris9开始,每个线程都有一个专用的LWP。
    Attribute object(属性对象) 包含不透明数据类型和相关处理函数。这些数据类型和函数可以 对POSIX线程一些可配置的方面,例如互斥锁(mutex)和条件变 量,进行标准化。
    Mutual exclusion lock(互斥锁)  用来锁定和解除锁定对共享数据访问的函数。 
    Conditionvariable(条件变量) 用来阻塞线程直到状态发生变化的函数。 
    Read-writelock(读写锁)

    可用于对共享数据进行多次只读访问的函数,但是要修改共享数 据则必须以独占方式访问。

    Countingsemaphore(计数信号 量)

     一种基于内存的同步机制
     Parallelism(并行性)  如果至少有两个线程正在同时执行,则会出现此情况。 
    Concurrency(并发性)

    如果至少有两个线程正在进行,则会出现此情况。并发是一种更 广义的并行性,其中可以包括分时这种形式的虚拟并行性。

    符合多线程标准

    多线程编程的概念至少可以回溯到二十世纪六十年代。多线程编程在UNIX系统中的 发展是从八十年代中期开始的。虽然对多线程的定义以及对支持多线程

    所需要的功能 存在共识,但是用于实现多线程的接口有很大不同。

    在过去的几年内,POSIX(PortableOperatingSystemInterface,可移植操作系统接口) 1003.4a工作小组一直致力于制定多线程编程标准。现在,该

    标准已得到认可。

    多线程的益处 

    在代码中实现多线程具有以下益处:

    ■ 提高应用程序的响应

    ■ 更有效地使用多处理器

    ■ 改进程序结构

    ■ 占用较少的系统资源

    提高应用程序的响应 

    可以对任何一个包含许多相互独立的活动的程序进行重新设计,以便将每个活动定义 为一个线程。

    例如,多线程GUI的用户不必等待一个活动完成即可启动另一个活动。

    有效使用多处理器

    通常,要求并发线程的应用程序无需考虑可用处理器的数量。使用额外的处理器可以 明显提高应用程序的性能。

    具有高度并行性的数值算法和数值应用程序(如矩阵乘法)在多处理器上通过多个线 程实现时,运行速度会快得多。

    改进程序结构

    许多应用程序都以更有效的方式构造为多个独立或半独立的执行单元,而非整块的单 个线程。多线程程序比单线程程序更能适应用户需求的变化。

    占用较少的系统资源

    如果两个或多个进程通过共享内存访问公用数据,则使用这些进程的程序可以实现对 多个线程的控制。

    但是,每个进程都有一个完整的地址空间和操作环境状态。每个进程用于创建和维护 大量状态信息的成本,与一个线程相比,无论是在时间上还是空间上代

    价都更高。

    此外,进程间所固有的独立性使得程序员需要花费很多精力来处理不同进程间线程的 通信或者同步这些线程的操作。

    结合线程和RPC(远程过程调用) 

    通过将多个线程和一个远程过程调用(remote procedure call,RPC)结合起来,可以充分 利用无共享内存的多处理器(如工作站集合)。这种结合将工作站集

    合视为一个多处 理器,从而使应用程序的分布变得相对容易些。

    例如,一个线程可以创建多个子线程,每个子线程随后可以请求远程过程调用,从而 调用另一个工作站上的过程。尽管初始线程此时仅创建了一些并行运行的

    线程,但是 这种并行性会涉及到其他计算机。

  • 相关阅读:
    暑假日报-35
    非确定性有穷状态决策自动机练习题Vol.1 题解 & 总结
    loj数列分块入门 1~9
    第12周作业
    第二阶段考试
    UOJ NOI Round 4
    事件
    爬楼梯
    构造函数输出
    比较版本号大小
  • 原文地址:https://www.cnblogs.com/codeblock/p/4718781.html
Copyright © 2011-2022 走看看