什么是线程?
? 线程也叫轻量级进程,是操作系统能够进行运算调度的最小单位,它被包涵在进程之中,是进程中的实际运作单位。 ? 线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其他线程共享进程所拥有的全部资源。一个线程可以创建和撤销另一个线程,同一个进程中的多个线程之间可以并发执行
简而言之,一个程序至少有一个进程,一个进程至少有一个线程.
什么是进程?
? 进程就是一个应用程序在处理机上的一次执行过程,它是一个动态的概念,而线程是进程中的一部分,进程包含多个线程在运行。 线程与进程的区别:
- 线程共享内存,进程独立内存
- 线程启动速度块,进程启动速度慢,运行时速度没有可比性
- 同一个进程的线程间可以直接交流,两个进程想通信,必须通过一个中间代理来实现
- 创建新线程很简单,创建新进程需要对其父进程进行一次克隆
- 一个线程可以控制和操作同一线程里的其他线程,但是进程只能操作子进程
什么是多线程?
多线程类似于同时执行多个不同程序,多线程运行有如下优点:
- 使用线程可以把占据长时间的程序中的任务放到后台去处理。
- 用户界面可以更加吸引人,比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度- 条来显示处理的进度。
- 程序的运行速度可能加快。
- 在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种- 情况下我们可以释放一些珍贵的资源如内存占用等等。
Python线程模块
python主要是通过thread和threading这两个模块来实现多线程支持。python的thread模块是比较底层的模块,python的threading模块是对thread做了一些封装,可以更加方便的被使用。
threading模块
1.直接使用
import threading
import time
def fun(args):
print("我是线程%s" % args)
time.sleep(2)
print("线程%s运行结束" % args)
t1 = threading.Thread(target=fun, args=(1,))
t2 = threading.Thread(target=fun, args=(2,))
start_time = time.time()
t1.start()
t2.start()
end_time = time.time()
print("两个线程一共的运行时间为:", end_time-start_time)
print("主线程结束")
"""
运行结果:
我是线程1
我是线程2两个线程一共的运行时间为: 0.0010077953338623047
主线程结束
线程1运行结束
线程2运行结束
"""
2.继承式调用
import threading
import time
class MyThreading(threading.Thread):
def __init__(self, name):
super(MyThreading, self).__init__()
self.name = name
def run(self):
print("我是线程%s" % self.name)
time.sleep(2)
print("线程%s运行结束" % self.name)
t1 = MyThreading(1)
t2 = MyThreading(2)
start_time = time.time()
t1.start()
t2.start()
end_time = time.time()
print("两个线程一共的运行时间为:", end_time-start_time)
print("主线程结束")
"""
运行结果:
我是线程1
我是线程2
两个线程一共的运行时间为: 0.0010724067687988281
主线程结束
线程2运行结束
线程1运行结束
"""
具体的可以参考如下链接: https://www.cnblogs.com/fjfsu/p/15709155.html https://blog.csdn.net/daiyu__zz/article/details/81912018 https://blog.csdn.net/weixin_40481076/article/details/101594705/
|