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('主线程')
    

  • 相关阅读:
    负margin在页面布局中的应用
    2018-05-04 圣杯布局 and 双飞翼布局,display:flex
    vue 动态加载图片路径报错解决方法
    vue 带参数的跳转-完成一个功能之后 之后需要深思,否则还会忘记
    vue项目打包后打开空白解决办法
    css 居中方法
    vue 不用npm下载安装包 该如何引用js
    安装WAMP 及 修改MYSQL用户名 、 密码
    Python 软件开发目录规范
    Python 1-3区分Python文件的两种用途和模块的搜索路径
  • 原文地址:https://www.cnblogs.com/lzss/p/11542079.html
Copyright © 2011-2022 走看看