宝塔服务器面板,一键全能部署及管理,送你10850元礼包,点我领取

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())