• python之-线程原理-开启线程两种方式,以及子进程与子线程pid的区别


    1.什么是线程

        进程其实不是个执行单位,进程是一个资源单位,每个进程内自带一个线程,线程才是cpu上的执行单位

        如果把操作系统比喻成为一座工程

        在工厂内每造出一个车间---》启动一个进程

        每个车间内至少有一条流水线---》每个进程内至少有一个线程

        

    简单理解比喻:

            线程:单指代码执行的过程(代码的执行)

            进程:资源的申请与销毁的过程(申请内存空间,回收内存空间,pid号等)进程包含了线程


    2.进程与线程的区别

            1.线程:单个线程里的内存空间数据共享

            2.进程:物理内存空间隔离(多个进程内存空间彼此隔离)

                        同一个进程下的多个线程共享该进程内的数据

            3.创建数据

                造出线程的数据要快于进程:进程是告诉操作系统开辟内存空间

                                                            线程是告诉操作系统执行一条任务代码(线程的创建速度是进程的100倍)

                                                

    两种开启线程的方法:
    from threading import Thread, current_thread
    import time
    
    # 方式1                                                 函数开启方式
    def task(name):
        print('%s is runing '%name)
        time.sleep(2)
        print('%s is done'%name)
    
    t=Thread(target=task,args=('子线程',))
    t.start()
    
    
    
    # 方式2 类开启方式class Task(Thread): def run(self): print('%s is runing ' % self.name) time.sleep(2) print('%s is done' % self.name)t = Task()t.start()print('zhu')

    3.进程开启子进程是开辟新的内存空间,而线程开启子线程是共用一个内存空间,

        即:进程开启子进程的pid号不一样,

               线程开启子线程的pid号一样


    from threading import Thread
    from multiprocessing import Process
    import os
    
    def work():
        print('hello',os.getpid())
    
    if __name__ == '__main__':
        #part1:在主进程下开启多个线程,每个线程都跟主进程的pid一样
        t1=Thread(target=work)
        t2=Thread(target=work)
        t1.start()
        t2.start()
        print('主线程/主进程pid',os.getpid())
    
        #part2:开多个进程,每个进程都有不同的pid
        p1=Process(target=work)
        p2=Process(target=work)
        p1.start()
        p2.start()
        print('主线程/主进程pid',os.getpid())

  • 相关阅读:
    python 包管理工具 pip 的配置
    Python 变量作用域 LEGB (下)—— Enclosing function locals
    Python 变量作用域 LEGB (上)—— Local,Global,Builtin
    2020 Java 面试题 小结 (答案慢慢补上,有错误请指出)
    mysql 根据日期(date)做年,月,日分组统计查询
    jvm指令
    正则表达式 分割地址 获取省市区详细地址
    .Net 异常记录
    WCF设计服务协议(一)
    plsql ORA-01789:查询块具有不正确的结果列数
  • 原文地址:https://www.cnblogs.com/Marcki/p/10111928.html
Copyright © 2020-2023  润新知