# coding:utf-8
'''
进程:重量级进程,就是程序的一次运行。进程拥有独立的内存空间。
线程:轻量级进程,就是进程分支,同一进程下的线程共享该进程的内存
python虚拟机:python模仿系统运行的一个功能,是单CPU虚拟机,而单CPU无法
实现真正的多线程
单CPU可以同时执行几件事? 一件事
为了能同时运行多个程序,则需要异步并发
通常对两件事 事件A和事件B 执行顺序 事件A --->事件B
时间片:将事件A和事件B,进行切分,事件A1、事件A2、事件A3,事件B1、事件B2、事件B3
异步并发:事件A1--->事件B1--->事件A2---->事件B2--->事件A3--->事件B3
1.线程是进程的分支
2.线程之间相互独立
3.线程拥有指针
4.线程可以被中断,也可以被抢占
5.进程结束而线程没有结束容易导致僵尸进程
6.线程之间由于共享进程的内存所以数据交互要比进程之间方便
全局解释器锁(Global Interpreter Lock):为了保证单CPU情况下,线程在运行的过程当中不被抢占
GIL : 全局解释器锁
GUI :图形化
例:
VIP电梯
A 9--->1 电梯上锁
B 7--->1 电梯被上锁,B不能再搭乘
生成锁 ——> 分配锁 ——> 获取锁 ——> 加锁 ——> 释放锁
一次性锁 :一次性的,用完后即消失
重用锁 :公共锁,用完后其它线程还可以继续用
'''
#---------------------------------------------------------------------------
#线程按顺序执行
# import time
#
# def loop0():
# print("loop0 start at :",time.ctime())
# time.sleep(3)
# print("loop0 stop at :",time.ctime())
#
# def loop1():
# print("loop1 start at :",time.ctime())
# time.sleep(3)
# print("loop1 stop at :",time.ctime())
#
# def main():
# print ('all start at :',time.ctime())
# loop0()
# loop1()
# print ('all stop at :',time.ctime())
#
# if __name__ =="__main__":
# main()
#----------------------------------------------------------------
#不同的编译器对线程有影响,以下程序请放在IDLE中执行
import time
import thread
def loop0():
print("loop0 start at :",time.ctime())
time.sleep(3)
print("loop0 stop at :",time.ctime())
def loop1():
print("loop1 start at :",time.ctime())
time.sleep(3)
print("loop1 stop at :",time.ctime())
def main():
print ('all start at :',time.ctime())
thread.start_new_thread(loop0,()) #将loop0放入线程当中并且开始执行,注意代码里没有让它停止,所以在loop0
#睡眠的时候,后面的代码也会继续执行,同理loop1也是,相当于同时进行后面的代码
thread.start_new_thread(loop1,()) #后面的一个括号是为了给loop0传参
#注意,这两个是不同的线程
print ('all stop at :',time.ctime())
if __name__ =="__main__":
main() #结果是main()函数执行完后,由于两个线程还没有结束,还在运行,如果
#将main()当作主函数看待,这相当于进程结束了线程没有结束,是僵尸进程
#可以在两个线程后 time.sleep(7) 这4秒内两个线程已经结束了,主程序也再4S后结束。
线程(一):进程与线程的概念,用基本的thread模块讲解线程含义
最新推荐文章于 2024-05-02 09:38:48 发布