并发编程之多线程一
1>线程
每个进程有一个地址空间,而且默认就有一个控制线程
进程只是用来把资源集中到一起(进程只是一个资源单位,或者说资源集合),而线程才是cpu上的执行单位。
2>线程与进程的区别
1、同一个进程内的多个线程共享该进程内的地址资源,但进程间内存空间不共享。
2、创建线程的开销要远小于创建进程的开销(创建进程需要申请一块内存空间,
而在进程内创建线程则不用重新开辟内存空间)
3>多线程应用场景
比如不同的进程 word,迅雷看看
但是word可以1>接收用户输入、2>保存到硬盘、3>处理其他操作,这些就是word进程里面的线程。
迅雷看看播放视频时 1>播放画面,2>播放声音,3>或者接收弹幕并发送等,这些就是迅雷看看进程里面的线程。
4>开启线程的方式
方法一
方法二
5>编写一个简单的文本处理工具,具备三个任务,一个接收用户输入,一个将用户输入的内容格式
化成大写,一个将格式化后的结果存入文件。
6>多线程与多进程的区别
6.1>线程的开销远小于进程,开启速度更快
6.2>pid不一样
6.3>同一进程内的线程共享该进程的数据,而进程间是隔离的
7>Thread对象的其他属性和方法
7.1>Thread实例对象的方法
isAlive(): 返回线程是否活动的。
getName(): 返回线程名。
setName(): 设置线程名。
7.2>threading模块提供的一些方法:threading.currentThread(): 返回当前的线程变量。
threading.enumerate(): 返回一个包含正在运行的线程的list。
threading.activeCount(): 返回正在运行的线程的数量,与len(threading.enumerate())有相同的结果。
8>守护线程
1、对主进程来说,运行完毕指的是主进程代码运行完毕
2、对主线程来说,运行完毕指的是主线程所在的进程内所有非守护线程统统运行完毕,主线程才算运行完毕
如下,守护线程和非守护线程不同运行时长的执行结果;