大部分操作系统(如Windows、Linux)的任务调度是采用时间片轮转的抢占式调度方式,也就是说一个任务执行一小段时间后强制暂停去执行下一个任务,每个任务轮流执行。任务执行的一小段时间叫做时间片,任务正在执行时的状态叫运行状态,任务执行一段时间后强制暂停去执行下一个任务,被暂停的任务就处于就绪状态 等待下一个属于它的时间片的到来。这样每个任务都能得到执行,由于CPU的执行效率非常高,时间片非常短,在各个任务之间快速地切换,给人的感觉就是多个任务在“同时进行”,这也就是我们所说的并发(一个时间间隔内,多个任务同时进行)。
计算机的核心是CPU,承担所有计算任务;操作系统是计算机管理者,负责任务的调度、资源的分配和管理,统领整个计算机硬件;应用程序是具有某种功能的程序,程序是运行于操作系统之上的。
进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配和调度的一个独立单位,是应用程序运行的载体。
进程是一种抽象的概念,从来没有统一的标准定义。进程一般由程序、数据集合和进程控制块三部分组成。
程序用于描述进程要完成的功能,是控制进程执行的指令集;数据集合是程序在执行时所需要的数据和工作区;程序控制块,包含进程的描述信息和控制信息,是进程存在的唯一标志。
python多线程模块
thread 和 threading模块
thread不支持守护线程。当主线程退出时,所有的子线程不管他们是否还在工作,都会被强行退出。有时我们并不希望发生这种行为,这是就引入了守护线程的概念。threading模块支持守护线程。
threading使用简介-1
threading.Thread(self,group=None,target = None,name = None,args=(),kwargs ={})
Thread是threading模块中最重要的类之一,可以使用 它来创建线程。有两种方式来创建线程:一种是通过继承Thread类,重写它的run方法;另一种是创建一个threading.Thread对象,在它的初始化函数(__init__)中将可调用对象作为参数传入。
参数group是预留的,用于将来扩展;
参数target是一个可调用对象(也称为活动【activity】),在线程启动后执行;
参数name是线程的名字。默认值为“Thread-N” ,N是一个数字。
参数args和kwargs分别表示调用target时的参数列表和关键字参数。
threading使用简介-2
Thread类定义了以下常用方法与属性:
Thread.getName()/Thread.name用于获取线程的名称,有返回值,需要print打印出来
Thread.setName() 用于设置线程的名称,没有返回值,print打印出来None
Thread.ident获取线程的标识符。线程标识符是一个非零整数,只有在调用了start()方法之后,该属性才有效,否则它直返回None。
Thread.is_alive()/Thread.isAlive 判断线程是否是激活的(alive)。从调用start()方法启动线程,到run()方法执行完毕或遇到未处理异常而中断这段时间内,线程是激活的。
Thread.join([timeout]) 调用Thread.join将会使线程堵塞,直到被调用线程运行结束或超时。参数timeout是一个数值类型,表示超时时间,如果未提供该参数,那么主调线程经一直堵塞到被线程结束。
Thread.join([timeout]) 调用Thread.join将会使主线程堵塞,直到被调用线程运行结束或超时。参数timeout是一个数值类型,表示超时使劲啊,如果未提供该参数,那么主线程将一直堵塞到被调线程结束。
1.什么使子线程?
包含在threading.Thread中,里面均视为子线程。
2.什么是主线程?
除了“不包含在Thread里面的程序”,UI界面和Main函数均为主线程,均可视为主线程。
setDaemon:主线程A启动了子线程B,调用B.setDaemaon(True),主线程结束时,会把子线程B也杀死。必须在运行线程之前设置。
Thread.isDaemon()/Thread.daemon用于获取线程的名称,有返回值,需要print打印出来
import threading
import time
def movie(name, loop):
for i in range(loop):
print('look movie %s %s %s' % (name, time.ctime(), threading.Thread.getName(t1)))
time.sleep(1)
def music(name, loop):
for i in range(loop):
print('listen music %s %s %s' % (name, time.ctime(), threading.Thread.getName(t2)))
time.sleep(1)
# 1.创建线程
t1 = threading.Thread(target=music, args=('爱的故事上级', 4))
t1.setName("musicThread")
t2 = threading.Thread(target=movie, args=('肖生客的旧墟', 4), name='movieThread')
if __name__ == '__main__':
# 4.守护主线程,主线程结束杀死子线程
t1.setDaemon(True)
t2.setDaemon(True)
# 2.启动线程
t1.start()
t2.start()
# 3.join 可以对主线程进行阻塞,等所有的子线程运行结束再运行主线程。
# t1.join()
# t2.join()
print('主线程%s', time.ctime())
print(t1.ident)
print(t2.ident)


被折叠的 条评论
为什么被折叠?



