系统相关
首页 > 系统相关> > 线程与进程的关系

线程与进程的关系

作者:互联网

概念:

线程的进程的一部分

进程是正在运行的程序实体

一个进程包含多个线程 

进程是程序中的资源调度的一个最小单位:一个进程可以并发多个线程,多个线程做不同的任务

不同的进程之间资源不共享,但是一个进程中的多个线程资源完全共享

多线程会导致资源冲突: 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