zoukankan      html  css  js  c++  java
  • 入坑准备

    一、一些基本概念

    1、线程是什么

      线程(英语:thread)是操作系统能够进行运算调度的最小单位。

    2、进程是什么

      进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。

    3、线程与进程的关系

      线程是进程实际的执行单位

    4、线程的切换

      从JVM上来理解,JVM的运行时内存区-

        PC:程序计数器(线程私有)

      假设线程A执行到一半,突然切换到线程B。等B分配的执行时间结束后。怎么知道A执行到哪里了?--从PC得知

      从内存模型来理解:

        工作内存是独立的,所以线程之间的数据其实是独立的。但实际上线程可能会调用到静态变量,这部分的数据是可以多个工作线程读写的。

    5、单核CPU设定多线程是否有意义

      多线程概念-并发。与并行不同,并行就像是杨过和小龙女一起使出玉女剑法;并发就是小龙女自己左右互搏。。。。

      所以,你如果问我单核CPU搞并发有没有用?那我问你,小龙女自己单手用招能不能打过全真教那几位道士?

      

      严肃点。。。

      计算机的性能制约点:IO、计算。IO又分很多种:内存、硬盘、网络、CPU缓存

      假设在读硬盘的时候很慢,我是不是能在这个时候先去干点别的。而不要让程序呈现假死的情况?

      这样可能还不是那么好理解,我们假设 A系统在调用B系统,此时B系统(具备独立计算、IO能力,需要10秒才能返回结果)。那么你希望A系统就卡在这10秒吗?

    6、线程数是不是越大越好

      这就涉及性能极限值了,首先肯定不是越大越好。但是要找到合适的线程数,需要通过压测。

    7、线程数的选择

      压测,有个教授的公式。总体上要先看当前系统是偏向计算型还是IO型,一般IO型可能就不需要选择太多的线程数,计算型的可能就需要多分配些,但也不是绝对的

    8、创建线程的几种方式

      。。。其实个人认为只有一种,new Thread。

      执行线程的多种方式的话:

        new Thread().start()

        new Runable(),最终用线程对象或线程池承载执行

        new Callable(),有返回对象的Runable

    二、线程状态

    • NEW
    • Runable
    • TERMINATED
    • Wating (LockSupport.park())
    • TimedWating
    • Blocked(Synchronized) 

    三、线程打断

    • stop【过时】
    • interrupt、interrupted
    • suspend(暂停),resume(恢复)

    四、并发三大特性

    • 可见性 - 其他线程可见,数据可共享
    • 有序性 - 执行不可乱序
    • 原子性 - 全部成功,全部失败

    五、锁升级

      偏向锁(门上写个纸条,有人在上厕所)-》自旋锁 - 很多人都想上厕所(在门外转悠,看啥时候能轮到自己)-》重量级锁 - 非常多人来或者一直有人插队(厕所所长来安排)

    六、ThreadPool

    • Single,有序
    • Fix,固定线程数
    • Cache,无边界
    • Schdule,定时

    七、TPE源码

    • CAS,线程数量和状态通过一个原子变量的高低位来控制
    • 五种状态:
      • Running 运行中
      • Shutdown 关机
      • Stop 停止
      • Tidying 整理
      • Terminated 终止

      

  • 相关阅读:
    计算机基础(7)
    计算机基础(6)
    计算机基础(5)
    计算机基础(4)
    计算机基础(3)
    计算机基础(2)
    计算机基础(1)
    数组、函数
    js基础知识
    随笔3
  • 原文地址:https://www.cnblogs.com/gabin/p/15294661.html
Copyright © 2011-2022 走看看