• 第一节:多线程基础知识


    一 基础概念

      1. 什么是进程: 进程是操作系统分配资源的最小单位,是cpu调度的最小单位

      2. 什么是线程: 任何一个进程里都有至少一个线程

      3. cpu核心数和线程数的关系: 

        1) 多核心是单芯片上多处理器,依靠多个处理器同时并行运行程序实现并行处理

        2) 一个处理器上多个程序同步执行共享处理器的资源

        3) 一般来说一个处理器对应一个线程数,但inter引进超核技术是一个处理器可以处理俩个线程数

      4. cpu时间片轮转:以单核cpu为例子,每个程序在cpu上都是一个运行一个时间片的时间,在时间片时间内运行完或者时间片时间耗尽都会进行时间片轮转,给下一个程序使用cpu;cpu时间片之间切换非常耗时,比如保存和装入寄存器值及内存映像,更新各种表格和队列等,如果一个时间片是20ms,那么切换的准备就需要5ms,需要百分之二十的时间做上下文切换,所以多线程频繁上下文切换很耗时就是这个原因。

      5. 并发与并行: 并发是利用在单个cpu上时间片轮转机制进行多任务切换实现并发,并行是多个cpu各自执行对应或者二倍cpu数目工作

      6. 高并发的好处,意义和注意事项:充分利用cpu资源,比如你的机器是双核,那么单线程跑只能利用四分之一资源;还可以加快用户响应时间,比如迅雷下载,多线程下载和多线程下载谁快显而易见;可以使代码结构化,简单化,异步化,比如下订单发邮件可以独立成俩个模块,有其他程序调度;

      7. 多线程需要注意的事项:线程之间的安全,比如全局变量的修改;线程之间的死锁,资源的抢夺;

      8. Java里的线程:Java是天生的多线程,一个main程序就要如下线程;并且java中对操作系统级别线程的抽象是Thread

    [6] Monitor Ctrl-Break //监控 Ctrl-Break 中断信号的
    [5] Attach Listener //内存 dump,线程 dump,类信息统计,获取系统属性等
    [4] Signal Dispatcher // 分发处理发送给 JVM 信号的线程
    [3] Finalizer // 调用对象 finalize 方法的线程
    [2] Reference Handler//清除 Reference 的线程
    [1] main //main 线程,用户程序入口

      9. 线程的启动与终止:可以通过thread ,start();runnable .run()进行启动;至于终止,要么程序自然执行完,要么抛出异常提前结束,要么interrupt手动结束;

    二 深入理解多线程

      1. run() :得到cpu执行方法,一般业务代码写在这里,可以多次执行

      2. start() :让线程进行就绪状态等待分配cpu ,只可以执行一次

      3. 守护线程:deamon,只能伴随其他线程一起存在,并且伴随的线程一旦死亡也就随之结束,一半做支持性工作,比如 gc

    三 线程间的共享协作

      1. sychronized锁:可以修饰方法或者以同步块的形式来进行使用,它主要确保多个线程在同一个时刻,只能有一个线程处于方法或者同步块中,它保证了线程对变量

    访问的可见性和排他性,又称为内置锁机制。注意,锁的是不变的对象

      2. 对象锁和类锁:对象锁是用于对象实例方法,或者一个对象实例上的,类锁是用于类的静态方法或者一个类的 class 对象上的。我们知道,类的对象实例可以有很多个,但

    是每个类只有一个 class 对象,所以不同对象实例的对象锁是互不干扰的,但是每个类只有一个类锁。但是有一点必须注意的是,其实类锁只是一个概念上的东西,并不是真实存
    在的,类锁其实锁的是每个类的对应的 class 对象。类锁和对象锁之间也是互不干扰的。
  • 相关阅读:
    Django-ORM
    Django-路由系统
    Django-(Request对象和Response对象)
    Django-(CBV和FBV)
    批量设置模板中的时间格式
    Django模板语言-(母板、组件、静态文件相关、simple_tag、inclusion_tag)
    yii2csrf攻击
    centos6更改密码
    ide vscode安装
    xshell配色方案
  • 原文地址:https://www.cnblogs.com/xiaoshahai/p/13861586.html
Copyright © 2020-2023  润新知