线程与进程的关系
作者:互联网
概念:
线程的进程的一部分
进程是正在运行的程序实体
一个进程包含多个线程
进程是程序中的资源调度的一个最小单位:一个进程可以并发多个线程,多个线程做不同的任务
不同的进程之间资源不共享,但是一个进程中的多个线程资源完全共享
多线程会导致资源冲突: win一般采用 多线程
多进程会导致资源占用不足: Linux不支持多线程, 只采用重量级多进程
并发和并行:
并发:通过cpu的调度,让用户看上去同时执行,实际上cpu操作层面不是真正的同时(多线程同时操作
并行: 多个cpu实例或者多台机器同时执行
python 全局锁 GIL(Global Interpreter Lock)
因此:不管如何设置多线程,都是并发而不是并行
故此: python的多线程编程技术只适合IO密集型的任务, 不适合计算型(cpu应用多)的任务
IO密集型: 频繁的读写数据的场景叫 IO密集型的任务,如 增删改查
计算型 : 频繁调用cpu计算的场景,叫计算密集型的场景, 如 算法逻辑运算
解决GIL的办法: 多进程的技术
python实现多线程的几种方式:
thread:模块提供了基本的线程和互斥锁的支持,更底层的实现模块
def start_new_thread (function, args, kwargs=None): 开启一个新的线程, 参数跟方法名字 ,元祖, 可选参数可以为空
threading: threading封装了thread,提供了更加全面的线程使用方法,是更高级的线程实现模块
Thread对象 描述name 线程名
ident 线程标志
daemon 表示是否是守护线程
__init__(group=None, tatget=None,args= (), kwargs ={}, verbose=None, daemon=None) 实例化一个线程对象,需要有一个可 调用的 target
start() 开始执行该线程
run() 线程启动时,运行的函数,通常会被 重写
join (timeout=None) 阻塞,直到达到timeout或者其他线 程执行完毕
getName() 返回线程名 设置线程名 线程是否存活 判断是否是守护线程
setName (name)
isAlivel /is_alive ()
isDaemon()
setDaemon(daemonic) 把线程的守护标志设定为True或者 False (必须在线程 start()之前调 用)
标签:关系,None,线程,进程,密集型,多线程,cpu 来源: https://www.cnblogs.com/Crush1998/p/16074675.html