zoukankan      html  css  js  c++  java
  • 线程

    线程

    在传统操作系统中,每个进程有一个地址空间,而且默认就有一个控制线程,cpu真正的执行单位是线程,在工厂中,每个车间都有房子,而且每个车间默认就有一条流水线

    操作系统===》工厂

    进程===》车间

    线程===》流水线

    进程运行===》电源

    相关知识点:

    线程:cpu最小的执行单位

    进程:资源集合/资源单位

    线程运行=运行代码

    进程运行=各种资源+线程

    右键运行:

    申请内存空间,先把解释器丢进去,并且把代码丢进去(进程做的),运行代码(线程)

    进程和线程的区别

    线程===》单指代码的执行过程

    进程===》资源的申请与销毁的过程

    特点:

    进程内存空间彼此隔离,同一个进程下的线程共享资源

    进程和线程的创建速度

    进程需要申请资源开辟空间,慢

    线程只是告诉操作系统一个执行方案,快

    线程开启的两种方式之函数

    from threading import Thread
    import time
    def task():
        print('线程 start')
        time.sleep(2)
        print('线程 end')
    
    
    if __name__ == '__main__':
        t = Thread(target=task)
        t.start()  # 告诉操作系统开一个线程  .
    
        print('主')
    

    线程开启的两种方式之类

    from threading import Thread
    import time
    # 进程等待所有线程结束才会结束
    
    class Myt(Thread):
        def run(self):
            print('子线程 start')
            time.sleep(5)
            print('子线程 end')
    
    t = Myt()
    t.start()
    print('主线程')
    

    子线程vs子进程创建速度

    from threading import Thread
    from multiprocessing import Process
    import time
    
    def task(name):
        print(f'{name} is running')
        time.sleep(2)
        print(f'{name} is end')
    
    
    if __name__ == '__main__':
        t = Thread(target=task,args=('子线程',))
        p = Process(target=task,args=('子进程',))
        # t.start()
        p.start()
        print('主')
        '''  
    开启子线程的打印效果:
    
    子线程 is running
    主
    子线程 is end
    
    开启子进程打印效果:
    
    主
    子进程 is running
    子进程 is end  
        '''
    

    子线程共享资源

    from threading  import Thread
    import time,os
    
    x = 100
    def task():
        global x
        x = 50
        print(os.getpid()) # 5204
    
    
    if __name__ == '__main__':
    
        t = Thread(target=task)
        t.start()
        time.sleep(2)
        print(x) # 50
        print(os.getpid())
    

    线程的join方法

    from threading import Thread
    import time
    def task():
        print('子线程 start')
        time.sleep(2)
        print('子线程 end')
    
    t = Thread(target=task)
    t.start()
    t.join() # 等待子线程运行结束
    print('主线程')
    

  • 相关阅读:
    Java-IO流-简介
    Java-异常处理-自定义异常
    致橡树-舒婷
    js字符串/数组常用方法总结
    使用vue-cli4快速搭建vue项目demo
    使用vue-cli4快速搭建vue项目demo
    小白第一次用MacOS
    文字背景对比度contrast ratio的计算公式
    如何使用 v-model 绑定一个 computed 属性?
    Java基础--数组
  • 原文地址:https://www.cnblogs.com/lzss/p/11542079.html
Copyright © 2011-2022 走看看