线程理论之大白话
Posted gzying-01
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线程理论之大白话相关的知识,希望对你有一定的参考价值。
什么是线程?
把一个进程比喻为一个车间,那么线程就是车间里面的一条条流水线。一个车间可以有多条流水线,流水线属于车间。一个车间的工作过程是一个进程,一个流水线的工作过程是一个线程。进程是操作系统资源分配的最小单位(生产科3号车间负责生产3万件包装纸箱),线程是cup调度的最小单位(3号车间里面的每一条生产线负责生产纸箱这个具体的任务)。
多线程的概念?
就是一个进程中存在多条线程。多线程是数据共享的(共享进程中的空间地址啥的),就是3号车间有多条流水线,都共用了一个车间的资源。
多线程的应用举例:
办公三件套之word为例,打开word软件就开启了一个进程,这个进程至少要干几件事儿,1监控键盘输入;2处理文字;3定时自动保存文字信息等,这几件事儿操作的都是同一块数据,所以不能使用多进程(进程间数据隔离啊),只能在一个进程里并发的开启三个县城,如果是单线程,那就只能是键盘输入时,不能处理文字和自动保存,自动保存时又不能打字。
开启线程的两种方式:
multiprocess模块完全模仿了threading模块的接口,二者在使用层面,有很大的相似性。
方式一:
from threading import Thread import time def sayhi(name): time.sleep(2) print(‘say hi %s‘ % name) if __name__ == ‘__main__‘: t = Thread(target=sayhi,args=(‘cariee‘,)) t.start() print(‘主线程‘)
方式二:
from threading import Thread import time class Sayhi(Thread): # 创建了进程Thread def __init__(self,name): super().__init__() # Thread的__init__方法很重要,通过super()调用 self.name = name def run(self): time.sleep(2) print(‘%s say hi‘ % self.name) if __name__ == ‘__main__‘: t = Sayhi(‘cariee‘) t.start() print(‘主线程‘)
多线程和多进程的区别:
1线程的创建开销小于进程创建的开销
2进程间数据隔离,线程间数据共享
Thread对象的其他属性和方法:
.isAlive(): 返回线程是否‘活着’
.getName():返回线程名
.setName():设置线程名
threading模块提供了一些方法:
threading.currentThread():返回当前的线程变量
threading.enumerate():返回一个包含正在运行的线程的list。正在运行指线程启动后、结束前,不包括启动前和终止后的线程
threading.activeCount():返回正在运行的线程数量,与len(threading.enumerate())有相同的结果
以上是关于线程理论之大白话的主要内容,如果未能解决你的问题,请参考以下文章
JUC并发编程 共享模式之工具 JUC CountdownLatch(倒计时锁) -- CountdownLatch应用(等待多个线程准备完毕( 可以覆盖上次的打印内)等待多个远程调用结束)(代码片段