Skr-Eric的网络编程课堂(八)-- 信号通信、信号量、进程的同步互换和Lock锁
信号通信
一个进程向另一个进程发送一个信号来传递某种讯息,接受者根据接收到的信号进行相应的行为
kill -l 查看系统信号
kill -sig PID 向一个进程发送信号
关于信号
信号名称 信号含义 默认处理方法
SIGHUP 连接断开
SIGINT CTRU-C
SIGQUIT CTRU-\
SIGTSTP CTRL-Z
SIGKILL 终止一个进程
SIGSTOP 暂停一个进程
SIGALRM 时钟信号
SIGCHLD 子进程状态改变时给父进程发出
python 发送信号
signal
os.kill(pid,sig)
功能: 发送信号
参数: pid 目标进程
sig 要发送的信号
import signal
signal.alarm(sec)
功能 : 向自身发送时钟信号 --》 SIGALRM
参数 : sec 时钟时间
* 进程中只能有一个时钟,第二个会覆盖第一个时间
同步执行 : 按照顺序逐句执行,一步完成再做下一步
异步执行 : 在执行过程中利用内核记录延迟发生或者准备 处理的事件。这样不影响应用层的持续执行。 当事件发生时再由内核告知应用层处理
* 信号是唯一的异步通信方法
signal.pause()
功能:阻塞等待接收一个信号
signal.signal(signum,handler)
功能: 处理信号
参数: signum 要处理的信号
handler 信号的处理方法
SIG_DFL 表示使用默认的方法处理
SIG_IGN 表示忽略这个信号
func 传入一个函数表示用指定函数处理
def func(sig,frame)
sig: 捕获到的信号
frame : 信号对象
信号量(信号灯)
原理 : 给定一个数量,对多个进程可见,且多个进程都可以操作。进程通过对数量多少的判断执行各自的行为。
multiprocessing --》 Semaphore()
sem = Semaphore(num)
功能: 创建信号量
参数: 信号量初始值
返回: 信号量对象
sem.get_value() 获取信号量值
sem.acquire() 将信号量减1 当信号量为0会阻塞
sem.release() 将信号量加1
进程的同步互斥
临界资源 :多个进程或者线程都能够操作的共享资源
临界区 : 操作临界资源的代码段
同步 : 同步是一种合作关系,为完成某个任务,多进程或者多线程之间形成一种协调,按照约定或条件执行操作临界资源。
互斥 : 互斥是一种制约关系,当一个进程或者线程使用临界资源时进行上锁处理,当另一个进程使用时会阻塞等待,直到解锁后才能继续使用。
Event 事件
multiprocessing --》 Event
创建事件对象
e = Event()
设置事件阻塞
e.wait([timeout])
事件设置 当事件被设置后e.wait()不再阻塞
e.set()
清除设置 当事件设置被clear后 e.wait又会阻塞
e.clear()
事件状态判断
e.is_set()
Lock 锁
创建对象
lock = Lock()
lock.acquire() 上锁 如果锁已经是上锁状态调用此函数会阻塞
lock.release() 解锁
with lock: 上锁
....
....
解锁
想要看更多的课程请微信关注SkrEric的编程课堂
Skr-Eric的网络编程课堂(八)-- 信号通信、信号量、进程的同步互换和Lock锁相关推荐
- 脑残式网络编程入门(八):你真的了解127.0.0.1和0.0.0.0的区别?
本文由"小姐姐养的狗"原创发布于"小姐姐味道"公众号,原题<127.0.0.1和0.0.0.0地址的区别>,收录时有优化和改动.感谢原作者的分享. ...
- Java网络编程(八)—— 组播和MulticastSocket
Java网络编程(八)-- 组播和MulticastSocket 文章目录 Java网络编程(八)-- 组播和MulticastSocket 什么是组播 MulticastSocket类 总述 构造方 ...
- Netty网络编程第八卷
Netty网络编程第八卷 整体架构 ByteBuf Channel EventLoop和EventLoopGroup ChannelFuture ChannelHandler和ChannelPipel ...
- java 学习笔记-网络编程(八)
网络编程 标签:学习各种网络协议的桥梁 什么是计算机网络 计算机网络的作用:资源共享和信息传递. 计算机网络的组成: a) 计算机硬件:计算机(大中小型服务器,台式机.笔记本等).外部设备(路由器.交 ...
- 网络编程——第一篇 基础之进程线程
在C#的网络编程中,进程和线程是必备的基础知识,同时也是一个重点,所以我们要好好的掌握一下. 一:概念 首先我们要知道什么是"进程",什么是"线程",好,查一下 ...
- 12篇学通C#网络编程——第一篇 基础之进程线程
在C#的网络编程中,进程和线程是必备的基础知识,同时也是一个重点,所以我们要好好的掌握一下. 一:概念 首先我们要知道什么是"进程",什么是"线程",好,查一下 ...
- android之http协议编程(源码ppt),Android网络编程(八)源码解析OkHttp中篇[复用连接池]...
1.引子 在了解OkHttp的复用连接池之前,我们首先要了解几个概念. TCP三次握手 通常我们进行HTTP连接网络的时候我们会进行TCP的三次握手,然后传输数据,然后再释放连接. TCP三次握手的过 ...
- python网络编程(八)
单进程服务器 1. 完成一个简单的TCP服务器 from socket import *serSocket = socket(AF_INET, SOCK_STREAM)# 重复使用绑定的信息 serS ...
- 网络编程之信号(处理僵尸进程的终极办法)之初识信号捕捉器
接着我们之前的管道所提出来的问题() 在创建子进程之后,子进程究竟何时终止????调用waitpid函数后还要无休止的等待子进程终止吗???",这显然会是一个问题.因为父进程往往与子进程一样 ...
最新文章
- 拼多多一度跌破发行价:已遭上海工商约谈 被要求自查自纠
- 数学建模学习笔记——聚类模型
- vant组件搜索并选择_Vue.js自定义弹层组件|vue仿微信/ios弹窗
- Day4 python基础
- SFB 项目经验-02-共存迁移-Lync 2013-TO-SFB 2015-规划02
- python贪吃蛇设计目标_基于 pygame 设计贪吃蛇游戏
- Object 及toString() 方法的重写
- C++11系列学习之七---------初始化列表
- java 程序增加 防盗_防盗Java EE –保护Java EE企业应用程序的安全
- vue 实现页面静态化
- android 3.0单元测试,Android Studio 3.0 gradle 3.0.0-beta2打破了Kotlin单元测试覆盖率?
- 力扣算法题—075颜色分类
- realme Pad通过认证:搭载7100mAh大容量电池
- AndroidStudio安卓原生开发_UI高级_RecyclerView_循环复用控件_代替ListView_GridView---Android原生开发工作笔记121
- 【问题】Nginx日志中request_body为空
- [译]Quartz.NET 框架 教程(中文版)2.2.x 之第五课 SimpleTrigger
- python坐标系教程_python Shapely使用指南详解
- 通过命令行安装silverlight4
- ADAPT-PT v8.0(房屋与停车场结构里的梁、板、楼板系统之先进后拉预力软件)
- node mysql菜鸟教程_Node.js Web 模块
热门文章
- Go调试利器-delve
- 判断数字是奇数还是偶数
- 主流waf非主流waf_通过黑客眼中的WAF
- 谁帮忙用C#实现下这个加解密函数
- 与计算机科学与技术相似的专业,【选专业】名称相似但实际千差万别的专业 谨防掉坑!...
- 短说社区论坛系统:活动模块功能介绍
- error: the following arguments are required: img, config, checkpoint
- 如何让信息化工程监理走向繁荣!
- K进制转换:二进制与十六进制
- html5 找妹子源码,搞笑GIF趣图:妹子一顿操作猛如虎,然后手中的球全部消失了...