zoukankan      html  css  js  c++  java
  • 学习python -- 第019天 多线程

    线程

    进程是分配资源的最小单位,一旦创建一个进程就会分配一定的资源,就像跟两个人聊QQ就需要打开两个QQ软件一样是比较浪费资源的.
    线程是程序执行的最小单位,实际上进程只负责分配资源,而利用这些资源执行程序的是线程,也就说进程是线程的容器,一个进程中最少有一个线程来负责执行程序.同时线程自己不拥有系统资源,只需要一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源.这就像通过一个QQ软件(一个进程)打开两个窗口(两个线程)跟两个人聊天一样,实现多任务的同时也节省了资源.

    多线程的作用

    ◆多线程是Python程序中实现多任务的一种方式.
    ◆线程是程序执行的最小单位.
    ◆同属一个进程的多个线程共享进程所拥有的全部资源

    线程创建

    与上一章的多进程大同小异

    1.导入线程模块
    import threading
    2.通过线程类创建线程对象
    线程对象=threading.Thread(target=任务名)
    3.启动线程执行任务
    线程对象.start()

    1 #创建子线程
    2 sing_thread=threading.Thread(target=sing)
    3 #创建子线程
    4 dance_thread=threading.Thread(target=dance)
    5 #启动线程
    6 sing_thread.start()
    7 dance_thread.start()

    带参数的线程也算差不多

    主线程和子线程的结束顺序

    ◆主线程会等待所有的子线程执行结束再结束,除非设置子线程守护主线程
    ◆设置守护主线程有两种方式:
    1.threading.Thread(target=work,daemon=True)
    2.线程对象.setDaemon(True)

    注意第二个要在线程开启前设置

    线程间的执行顺序

    ◆线程之间执行是无序的,是由CPU调度决定某个线程先执行的。

     1 #
     2 # @author:浊浪
     3 # @version:0.1
     4 # @time: 2021/8/1 22:19
     5 #
     6 import threading
     7 import time
     8 
     9 
    10 def task():
    11     time.sleep(1)
    12     #current thread:获取当前线程的线程对象
    13     thread=threading.current_thread()
    14     print(thread)
    15 if __name__ =='__main__':
    16     for i in range(5):
    17         sub_thread=threading.Thread(target=task)
    18         sub_thread.start()
    19 
    20 #结论:多线程之间执行是无序。由cpu调度。
    21 '''
    22 输出
    23 <Thread(Thread-5, started 14428)><Thread(Thread-3, started 42576)>
    24 <Thread(Thread-2, started 36360)>
    25 <Thread(Thread-1, started 67972)>
    26 <Thread(Thread-4, started 36532)>
    27 '''

    进程和线程的对比

    关系对比

    1.线程是依附在进程里面的,没有进程就没有线程。

    2.一个进程默认提供一条线程,进程可以创建多个线程。

    区别对比

    1.创建进程的资源开销要比创建线程的资源开销要大

    2.进程是操作系统资源分配的基本单位,线程是CPU调度的基本单位

    3.线程不能够独立执行,必须依存在进程中

    优缺点对比

    1.进程优缺点:
    优点:可以用多核
    缺点:资源开销大


    2.线程优缺点:
    优点:资源开销小
    缺点:不能使用多核

    认清现实,放弃幻想。 细节决定成败,心态放好,认真学习与工作。
  • 相关阅读:
    用于创建和管理 Azure 虚拟机的常用 PowerShell 命令
    在 Azure Resource Manager 中为虚拟机设置密钥保管库
    使用 Azure 资源管理器向 Windows VM 应用策略
    Azure 门户中基于角色的访问控制入门
    为 Azure Resource Manager 中的虚拟机设置 WinRM 访问权限
    如何加密 Windows VM 上的虚拟磁盘
    适用于 Windows VM 的 Azure 示例基础结构演练
    Azure 中虚拟机的备份和还原选项
    1.1 基本算法和记号
    tomcat的class加载的优先顺序
  • 原文地址:https://www.cnblogs.com/jyf2018/p/15087907.html
Copyright © 2011-2022 走看看