python笔记 5-6 线程和多任务, 互斥锁 TCP 三次握手和四次挥手

day5 线程和多任务

TCP的三次握手用于建立连接标志位
SYN连接请求
FIN关闭连接
ACK确认序号
seq报文序号
ack确认号
TCP的四次挥手用于断开连接
MSL最大报文生存时间
多任务 同一时间多个程序同时运行
线程 程序的分支,系统调度和分派的最小单位拥有少量必不可少的资源就可以运行
主线程 程序的主干main()
子线程 通过 threading.Tread()创建出来的都是子线程
创建 :子线程名(线程对象) = threading.Thread(target=函数名,args=(参数),kwargs=(键值对参数))
运行 子线程名.start()
主线程和子线程:主线程默认会等待子线程执行完毕后再结束
子线程执行顺序:无序,由系统cpu调度
守护线程:主线程结束后,子线程也立即结束,用法 线程.setDaemon(True)
自定义线程类
继承 threading.Thread
重写 run 方法
如果重写了构造方法,则需要调用父类的init()
super(当前类名,self).init()
多线程-共享全局变量
多线程中可以共享全局变量
获取全局变量值
修改全局变量值
global 全局变量名
修改全局变量值
带来的问题?
多个线程同时修改全局变量,导致资源竞争

day6 多线程 互斥锁
同步和异步
同步
多个任务之间执行的时候,有先后顺序,必须一个执行完毕后,另外一个才能继续执行
异步
多个任务之间执行没有先后顺序,可以同时运行,执行的先后顺序不会有什么影响
解决资源竞争的问题使用同步但会降低执行效率
互斥锁
通过对竞争资源加互斥锁,可以解决资源竞争问题,同时又能兼顾执行效率
用法
创建互斥锁
mutex = threading.Lock()
锁定资源
mutex.acquire()
释放资源
mutex.release()
死锁
在线程间共享多个资源的时候,如果两个线程分别占有一部分资源并且同时等待对方的资源
尽可能减少互相等待资源的情况,做到资源使用完毕后,及时释放
多任务版udp聊天器
改进思路
单独开辟子线程,专门用来接收信息
具体步骤
1、撤销功能菜单“接收信息” 选项
2、单独开辟子线程,接收信息
3、设置接收信息为循环接收
UDP广播
广播,
向网络中所有的主机发送信息
广播地址
255.255.255.255
广播发送权限
udp_socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, True)
TCP服务端架构
功能
1、实现制定端口监听
2、实现服务器端地址重用,避免”Address already in use” 错误
3、能够支持多个客户端连接
4、能够支持不同的客户端同时收发消息(开启子线程)
5、服务器端主动关闭服务后,子线程随之结束

进程及状态进程概念
进程是资源分配的最小单位,程序隔离的边界。
系统默认启动
主进程
主线程
子线程1
子线程2

子进程1
子进程2

进程状态
新建
就绪
运行
死亡
阻塞
进程的使用
创建
multiprocessing.Process()
参数
target=进程要执行的分支(函数)
args=传递到函数的参数
kwargs=传递到函数的可变参数
name=设置进程名称
名称multiprocessing.current_process()
进程id
方法一multiprocessing.current_process().pid
方法二os.getpid()
进程父id os.getppid()
参数传递args=
传递元组kwargs=
传递可变参数
共享全局变量 进程间不共享全局变量
主进程守护
p1.daemon = True
p1.terminate()
进程和线程的对比
线程和线程之间可以共享全局变量
进程和进程之间不共享全局变量
创建线程可以共享进程中的资源,但是创建进程会向操作系统索要运行资源
多进程开发某个进程挂了,不会影响其它进程的运行
单进程多线程开发,如果进程挂了,那么线程全部消耗,那么多进程开发比多线程开发稳定性要强,但是多进程开发资源消耗比多线程开发资源消耗要大

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值