zoukankan      html  css  js  c++  java
  • 第 4 章 多线程

    4.1 线程

      每个线程是cpu使用的一个基本单元,它包括线程ID、程序计数器、寄存器组和堆栈。它与同一进程的其他线程共享代码段、数据段和其他操作系统资源。

              

       多线程编程的优点:响应性、资源共享、经济、可伸缩性。

    4.2 多核编程

      对于单核系统,并发仅意味着线程随着时间交替执行,因为处理核只能同一时间执行单个线程。

      对于多核系统,并发表示线程能够并行运行,因为系统可以给每个核分配一个单独的线程。

      并行性和并发性的区别:

        并行系统可以同时执行多个任务,并发系统支持多个任务,允许所有任务都取得进展。没有并行,并发也是可能的。

    4.3 多线程模型

      通过用户线程和内核线程来提供线程支持。用户线程位于内核线程之上,它的管理无需内核支持,而内核线程由操作系统来直接支持与管理。

    多对一模型

      映射多个用户线程到一个内核线程。

      线程管理由用户控件的线程库来完成,因此效率高。但一个线程执行阻塞系统调用,那么整个进程将会阻塞。任一时间只有一个线程可以访问内核,所以多个线程不能并行运行在多处理核系统上。

    一对一模型

      映射每个用户线程到一个内核线程。

      一个线程执行阻塞系统时,允许另一个线程继续执行,同时也允许多线程并行运行在多核系统上。唯一的缺点是创建一个用户线程就要创建一个内核线程,由于创建内核线程的开销会影响应用程序的性能,所以这种模型的大多数限制了系统支持的线程数量。

    多对多模型

      多路复用多个用户线程到同样数量或更少的内核线程。

      可以创建任意多的用户线程,并且在多核系统上并行执行。当一个线程执行阻塞系统调用时,内核可以调度另一个线程来执行。

    4.4 线程库

      线程库为程序员提供创建和管理线程的API。

    4.5 隐式多线程

      将多线程的创建和管理交给编译器和运行时库来完成,这种策略叫隐式线程。

    4.5.1 线程池

      思想:在进程开始时创建一定数量的线程,并且加到池中等待工作,当收到请求时,会唤醒池中的一个可用线程,一旦线程完成了任务,它会返回池中等待工作。如果迟中没有可用线程,那么会等待直到有空线程为止。  

  • 相关阅读:
    javascript的闭包的形成
    MongoDB 基础
    VirtualBox的四种网络连接方式
    jquery插件Asgrid开发小记
    jQuery插件开发指南[转]
    javascript对Dom操作中table添加行性能问题
    【对.NET系统架构改造的一点经验和教训】的技术要点的看法
    杭电1205
    杭电1248
    杭电2059
  • 原文地址:https://www.cnblogs.com/astonc/p/12150815.html
Copyright © 2011-2022 走看看