zoukankan      html  css  js  c++  java
  • 线程

    线程

    线程杂谈

    #线程:CPU最小的执行单位。
    #进程:资源集合/资源单位
    #线程运行:运行代码
    #进程运行:各种资源 +线程
    
    """
    右键运行:
    	申请内存空间,先把解释器(解释器代码)丢进去并且把写的代码丢进去(进程做的),运行代码(线程)(解释器开启进程先解释我写的代码)。
    	
    	
    	
    进程和线程的区别:
    线程 ==> 单指代码的执行过程
    进程 ==> 资源的申请与销毁的过程
    
    
    
    进程内存空间彼此隔离
    同一个进程下的线程共享资源。
    
    进程和线程的创建速度:
    进程需要申请资源开辟空间  慢
    只是告诉操作系统一个执行方案 快
    """
    

    线程用法

    #线程开启的方式一:
    from threading import Thread
    import time
    # 进程等待所有线程结束才会结束
    def task():
        print('子线程  开启')
        time.sleep(2)
        print('子线程  结束')
    
    # if __name__ == '__main__':
    '''
    这句可以不需要加,因为线程执行不需要重新开启内存空间,
    直接是让操作系统开线程,也不会出现开启子进程那种类似递归的
    问题
    '''
        t = Thread(target=task)
        t.start()
        print('主线程')
    
    #线程开启的方式二(继承Thread类):
    from threading import Thread
    import time
    
    class task(Thread):
        def run(self):
            print('子进程 开始')
            time.sleep(3)
            print('子进程 结束')
    
    t = task()
    t.start()
    print('主线程')
    
    
    
    #子进程和子线程的开启速度
    from multiprocessing import Process
    from threading import Thread
    import time
    
    def task(name):
        print(f'{name} start')
        time.sleep(2)
        print(f'{name} end')
    
    if __name__ == '__main__':
        p = Process(target=task, args=('子进程', ))
        t = Thread(target=task, args=('子线程', ))
        t.start() #先打印子进程 start ,然后是 主, 最后是子进程 end
        # p.start()#先打印主,然后是子进程 start  最后是子进程 end
        print('主')
    
    '''
    进程和线程的创建速度
    开启子进程需要申请资源开辟空间 慢
    开启子线程只是告诉操作系统一个执行方案 快
    '''
    
    #子线程共享资源
    from threading import Thread
    import os
    
    x = 100
    def task():
        global x
        x = 50
        print(os.getpid()) #打印的是子线程的pid号
    if __name__ == '__main__':
        t = Thread(target=task)
        t.start()
        print(x)
        print(os.getpid()) #打印的是主线程的pid号
    
    '''
    主线程和子线程共用一块内存空间,因为pid号相同,且x修改成功
    '''
    
    #线程的join方法
    
    from threading import Thread
    import time
    
    def task(name, n):
        print(f'{name}{n} start')
        time.sleep(2)
        print(f'{name}{n} end')
    
    if __name__ == '__main__':
    
        start = time.time()
        t1 = Thread(target=task, args=('子线程', 1))
        t2 = Thread(target=task, args=('子线程', 2))
        t3 = Thread(target=task, args=('子线程', 3))
        t1.start()
        t2.start()
        t3.start()
        t1.join() # 等待子线程运行结束
        t2.join() # 等待子线程运行结束
        t3.join() # 等待子线程运行结束
        end = time.time()
        print('主') #最后才运行 主
        print(end - start) #2.001624822616577
    
    
    # 主进程和子线程的结束时间
    from multiprocessing import Process
    from threading import Thread
    import time
    
    def task():
        print('进程 开启')
        time.sleep(5)
        print('进程 结束')
    def task2():
        print('子线程 开启')
        time.sleep(2)
        print('子线程 结束')
    
    if __name__ == '__main__':
        p = Process(target=task)
        t = Thread(target=task2)
        t.start()
        p.start()
        print('子进程未开始')
        p.join() #主进程的主线程等待子进程运行结束
        print('主')
    
  • 相关阅读:
    初心
    [CSP-S2019]:赛后总结
    最帅的快读
    检讨书模板
    $Linux$系统$GEDIT$编译运行$C++$和各种乱搞
    [CSP-S模拟测试]:C(倍增+数学)
    [CSP-S模拟测试]:B(期望DP)
    [CSP-S模拟测试]:A(单调栈维护凸包+二分答案)
    [NOIP2018]:旅行(数据加强版)(基环树+搜索+乱搞)
    [JZOJ6347]:ZYB玩字符串(DP+记忆化搜索)
  • 原文地址:https://www.cnblogs.com/michealjy/p/11537733.html
Copyright © 2011-2022 走看看