zoukankan      html  css  js  c++  java
  • 第一章 并发简介

    1.1 并发简史

      操作系统使得计算机每次能运行多个程序,并且不同的程序都在单独的进程中运行: 操作系统为每个独立的进程分配各种资源,包括内存,文件句柄和安全证书等. 如果需要的话,在不同进程之间可以通过一些粗粒度的通信机制来交换数据, 包括套接字,信号处理器,共享内存,信号量及文件  

      计算机加入操作系统的原因:

      a. 资源利用率: 某些情况下,计算机必须等待某个外部操作执行完成,而在等待时程序无法执行其他工作. 如果在等待的时候可以同时运行另外一个程序,那么将提高资源的利用率.

      b. 公平性: 一种高效的运行方式是通过粗粒度的时间分片使用户和程序共享计算机上的资源.

      c. 便利性: 编写多个程序执行计算任务更容易实现.

      串行编程模型: 对于每条被执行的指令,都有对应的"下一条指令",程序的控制流是按照指令集的规则来确定的. 其优势在于直观性和简单性.

      线程允许同一个进程中存在多个程序控制流,线程共享进程范围内的资源. 如内存句柄和文件句柄, 每个线程拥有各自的程序计数器,栈(虚拟机栈)以及局部变量表

      线程也被称为轻量级进程,操作系统中大多以线程为基本的调度单位. 同一个进程的所有线程共享进程的内存地址空间,因此线程都能访问相同的变量并在同一个堆上分配对象.

      因此需要实现一种比进程间共享数据粒度更细的数据共享机制. 

    1.2 线程的优势

      多个线程可以同时在多个处理器上执行, 可通过提高处理器的资源利用率来提升系统吞吐率. 

      可以将复杂工作流分解为简单的工作流,每个工作流在一个单独的线程中运行,并在特定的同步位置进行交互. 

    1.3 线程的安全性问题

      比如: 由于多线程中的操作顺序是不可预测的(线程通过抢占CPU执行任务),可能使得读取到某个变量的失效值.

  • 相关阅读:
    3.node.js AssertionError: false == true错误解决
    9.获取当前时区时间和utc时间的工具方法
    2.Express封装mysq方法
    1.Express初识
    poj 3617
    前缀和
    pop 反序列化
    Reverse前两个题
    前两个Web题
    Misc
  • 原文地址:https://www.cnblogs.com/virgosnail/p/9445815.html
Copyright © 2011-2022 走看看