进程线程
Posted neuropathy_ldsly
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了进程线程相关的知识,希望对你有一定的参考价值。
并发:在同一个时间段能同时执行多个程序的能力
进程:程序运行的状态,这个过程叫进程
进程组成:
程序,数据集,进程控制快。进程控制块是记录进程的外部特征,是系统感知进程的唯一标识
进程是最小的资源管理单元
线程:
线程是进程下的最小执行单位。
线程使用的是进程的资源
线程一定在进程中,不存在独立的线程
线程还有主线程,一个进程肯定有个主线程
主线程可以开辟子线程
进程线程切换原则:
操作者:操作系统
原则:
1.时间片
2.遇到I/O操作切换(当程序卡在IO等待时,不会占用CPU资源)
3.优先级切换
串行: 依次执行 多个线程
并行: 同时执行多个任务的执行
并发: 切换任务的执行方式 并发
下图说明:
同步异步:
发送请求一直在等待结果的返回,收到结果之后才继续执行。这是同步
发送请求但是并不会一直等待结果返回,程序就继续执行。这是异步
Python中的多线程多进程跟其他语言的区别:
python在进程上有“一把锁”,同一时间只能有一个线程被执行。
python没办法在一个进程下实现过个线程并行(不支持多核)
守护进程:
必须在start前执行
被守护的子线程会在主进程执行完毕后被直接结束,就算子线程没有执行完依然会被结束。
IO密集型任务: 程序存在大量 IO操作
计算密集型任务:程序存在大量计算操作(非IO操作)
总结:
Python的多线程处理 IO密集型任务 有优势
对于处理 计算密集型的 没有优势,甚至不如不使用
import threading #导入进程模块 import time def foo(n): print("%s" %n) time.sleep(n) def bar(n): print("%s" % n) time.sleep(n) a=time.time() t1=threading.Thread(target=foo,args=(2,)) #生成子进程对象 调用函数 t1.setDaemon(True) #设置 T1子进程为守护进程 t1.start() #执行子进程 t2=threading.Thread(target=bar,args=(5,)) t2.start() #多线程对象调用 t1.join() t2.join() #join阻塞主线程, print(time.time()-a)
以上是关于进程线程的主要内容,如果未能解决你的问题,请参考以下文章