进程和线程

进程就是一个程序在一个数据集上的一次动态执行过程(抽象概念);
进程一般由程序、数据集、进程控制块三部分组成;
程序用来描述进程要完成哪些功能以及如何完成;
数据集则是程序在执行过程中所需要使用的资源;
进程控制块用来记录进程的外部特征,描述进程的执行变化过程,系统可以利用它来控制和管理进程,它是系统感知进程存在的唯一标志;
线程 是为了降低上下文切换的消耗,提高系统的并发性,并突破一个进程只能干一样事的缺陷,使进程内并发成为可能。
线程是最小的执行单位(实例);进程是最小的资源单位(实现了多任务并发)

1、一个程序至少有一个进程,一个进程至少有一个线程,进程可以理解为线程的容器;
2、进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率;
3、线程在执行过程中和进程还是有区别的,每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口,但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制;
4、进程是系统进行资源分配和调度的一个独立单位;
线程是进程的实例,是CPU调度和分资源的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈)但是它可与同属一个进程的其他线程共享进程所拥有的全部资源;
一个线程可以创建和撤销另一个线程(线程中再开线程);同一个进程中的多个线程之间可以并发执行。

实例方法:

run()	用于表示线程活动的方法
start()	用于启动线程活动
laAlive()	返回线程是否活动
getname()	返回线程名
setname()	设置线程名

Threading模块方法:

threading.currentThread()	返回当前线程变量
threading.enumerate()	返回一个包含正在运行的线程的list,正在运行指线程启动后、结束前,不包含启动前和终止后的线程
threading.activeCount()	返回正在运行的线程数量,与len(threading.enumerate())有相同的结果
两种创建线程的方法
# import threading    #进程
# import time
#
# def Hello(name):
#     print("hello %d"%name)
#     time.sleep(3)
#
#
# if __name__ == '__main__':
#     t1 = threading.Thread(target=Hello,args=(10,)) #创建了一个线程对象t1
#     t1.start()
#
#     t2 = threading.Thread(target=Hello, args=(9,))  # 创建了一个线程对象t2
#     t2.start()
#
#     print("ending.....")


#==========================继承类调用
import threading
import time

class MyThread(threading.Thread):
    def __init__(self,num):
        threading.Thread.__init__(self)
        self.num = num

    def run(self):  #定义每个线程要运行的函数(重新定义run方法)
        print("running on number:%s" % self.num)
        time.sleep(3)

if __name__ == '__main__':
    t1 = MyThread(1)
    t2 = MyThread(2)

    t1.start()
    t2.start()
    print("ending...")
join,setDaemon(实例方法)

join的任务就是线程同步,即主线程任务结束之后,进入阻塞状态,一直等待其他的子线程执行结束之后,主线程再终止
setDaemon(True)方法,设置子线程为守护线程,主线程一旦执行结束,则全部线程全部被终止执行

import threading
import time

def music():
    print("begin to listen %s"%time.ctime())
    time.sleep(3)
    print("stop to listen %s"%time.ctime())

def game():
    print("begin to play game %s"%time.ctime())
    time.sleep(5)
    print("stop to play game %s"%time.ctime())


if __name__ == '__main__':

    l = []
    t1 = threading.Thread(target=music)
    t2 = threading.Thread(target=game)
    l.append(t1)
    l.append(t2)
    t2.setDaemon(True)  # 注意:一定在start之前设置(守护线程,主线程结束其也结束)
    for t in l:
        t.start()
    print("ending...")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值