• 学习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.线程优缺点:
    优点:资源开销小
    缺点:不能使用多核

    认清现实,放弃幻想。 细节决定成败,心态放好,认真学习与工作。
  • 相关阅读:
    几种比较好看的颜色代码
    浅谈Express的put与del
    关于Linux软连接
    logstash根据日志关键词报警
    linux历史命令审计
    showdoc升级问题,showdoc错误日志
    以Docker容器的形式运行GVM-11
    主机标准化配置文档
    网络设备标准化配置文档
    Zabbix日常监控之lvs监控
  • 原文地址:https://www.cnblogs.com/jyf2018/p/15087907.html
Copyright © 2020-2023  润新知