4月23日 python学习总结 套接字UDP和 操作系统理论,多道理论
一、套接字UDP
udp是无链接的,先启动哪一端都不会报错
UDP(user datagram protocol,用户数据报协议)是无连接的,面向消息的,提供高效率服务。不会使用块的合并优化算法,, 由于UDP支持的是一对多的模式,所以接收端的skbuff(套接字缓冲区)采用了链式结构来记录每一个到达的UDP包,在每个UDP包中就有了消息头(消息来源地址,端口等信息),这样,对于接收端来说,就容易进行区分处理了。 即面向消息的通信是有消息保护边界的。
服务器
#服务器 ss = socket() #创建一个服务器的套接字
ss.bind() #绑定服务器套接字
inf_loop: #服务器无限循环
cs = ss.recvfrom()/ss.sendto() # 对话(接收与发送)
ss.close() # 关闭服务器套接字
客户端
#客户端 cs = socket() # 创建客户套接字
comm_loop: # 通讯循环
cs.sendto()/cs.recvfrom() # 对话(发送/接收)
cs.close() # 关闭客户套接字
udp套接字简单示例
1 #_*_coding:utf-8_*_
2 __author__ = 'Linhaifeng'
3 import socket
4 ip_port=('127.0.0.1',9000)
5 BUFSIZE=1024
6 udp_server_client=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
7
8 udp_server_client.bind(ip_port)
9
10 while True:
11 msg,addr=udp_server_client.recvfrom(BUFSIZE)
12 print(msg,addr)
13
14 udp_server_client.sendto(msg.upper(),addr)
服务器
1 #_*_coding:utf-8_*_
2 __author__ = 'Linhaifeng'
3 import socket
4 ip_port=('127.0.0.1',9000)
5 BUFSIZE=1024
6 udp_server_client=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
7
8 while True:
9 msg=input('>>: ').strip()
10 if not msg:continue
11
12 udp_server_client.sendto(msg.encode('utf-8'),ip_port)
13
14 back_msg,addr=udp_server_client.recvfrom(BUFSIZE)
15 print(back_msg.decode('utf-8'),addr)
客户端
二、操作系统
参照老师博客: http://www.cnblogs.com/linhaifeng/p/6295875.html
1. 什么是操作系统?
操作系统是位于计算机硬件与软件之间用于协调管理控制计算机硬件与软件的资源的一种控制程序
2. 操作系统两大作用:
1、 把复杂的丑陋的硬件操作都封装成 美丽的接口,提供给应用程序用
2、 把进程对硬件的竞争变的有序
三、多道理论
多道技术中的多道指的是多个程序,多道技术的实现是为了解决多个程序竞争或者说共享同一个资源(比如cpu)的有序调度问题,解决方式即多路复用,多路复用分为时间上的复用和空间上的复用。
1、空间上的复用:将内存分为几部分,每个部分放入一个程序,这样,同一时间内存中就有了多道程序。
2、时间上的复用:当一个程序在等待I/O时,另一个程序可以使用cpu,如果内存中可以同时存放足够多的作业,则cpu的利用率可以接近100%,类似于我们小学数学所学 的统筹方法。(操作系统采用了多道技术后,可以控制进程的切换,或者说进程之间去争抢cpu的执行权限。这种切换不仅会在一个进程遇到io时进行, 一个进程占用cpu时间过长也会切换,或者说被操作系统夺走cpu的执行权限)
详解:
现代计算机或者网络都是多用户的,多个用户不仅共享硬件,而且共享文件,数据库等信息,共享意味着冲突和无序。
操作系统主要使用来
1.记录哪个程序使用什么资源
2.对资源请求进行分配
3.为不同的程序和用户调解互相冲突的资源请求。
我们可将上述操作系统的功能总结为:处理来自多个程序发起的多个(多个即多路)共享(共享即复用)资源的请求,简称多路复用
多路复用有两种实现方式
1. 时间上的复用
当一个资源在时间上复用时,不同的程序或用户轮流使用它,第一个程序获取该资源使用结束后,在轮到第二个。。。第三个。。。
例如:只有一个cpu,多个程序需要在该cpu上运行,操作系统先把cpu分给第一个程序,在这个程序运行的足够长的时间(时间长短由操作系统的算法说了算)或者遇到了I/O阻塞,操作系统则把cpu分配给下一个程序,以此类推,直到第一个程序重新被分配到了cpu然后再次运行,由于cpu的切换速度很快,给用户的感觉就是这些程序是同时运行的,或者说是并发的,或者说是伪并行的。至于资源如何实现时间复用,或者说谁应该是下一个要运行的程序,以及一个任务需要运行多长时间,这些都是操作系统的工作。
2. 空间上的复用
每个客户都获取了一个大的资源中的一小部分资源,从而减少了排队等待资源的时间。
例如:多个运行的程序同时进入内存,硬件层面提供保护机制来确保各自的内存是分割开的,且由操作系统控制,这比一个程序独占内存一个一个排队进入内存效率要高的多。
有关空间复用的其他资源还有磁盘,在许多系统中,一个磁盘同时为许多用户保存文件。分配磁盘空间并且记录谁正在使用哪个磁盘块是操作系统资源管理的典型任务。
这两种方式合起来便是多道技术
空间上的复用最大的问题是:程序之间的内存必须分割,这种分割需要在硬件层面实现,由操作系统控制。如果内存彼此不分割,则一个程序可以访问另外一个程序的内存
首先丧失的是安全性,比如你的qq程序可以访问操作系统的内存,这意味着你的qq可以拿到操作系统的所有权限。
其次丧失的是稳定性,某个程序崩溃时有可能把别的程序的内存也给回收了,比方说把操作系统的内存给回收了,则操作系统崩溃。
4月23日 python学习总结 套接字UDP和 操作系统理论,多道理论的更多相关文章
- 4月20日 python学习总结 套接字工作流程
		一.套接字工作流程 一个生活中的场景.你要打电话给一个朋友,先拨号,朋友听到电话铃声后提起电话,这时你和你的朋友就建立起了连接,就可以讲话了.等交流结束,挂断电话结束此次交谈. 生活中的场景就解释了这 ... 
- 4月19日 python学习总结 套接字模块的使用
		服务端: import socket phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 买电话 phone.bind(('127.0.0 ... 
- 4月8日 python学习总结 模块与包
		一.包 #官网解释 Packages are a way of structuring Python's module namespace by using "dotted module n ... 
- 4月2日 python学习总结
		昨天内容回顾: 1.迭代器 可迭代对象: 只要内置有__iter__方法的都是可迭代的对象 既有__iter__,又有__next__方法 调用__iter__方法==>得到内置的迭代器对象 调 ... 
- 4月18日 python学习总结 异常处理、网络编程
		一. 异常 1.什么是异常 异常是错误发生的信号,程序一旦出错,如果程序中还没有相应的处理机制 那么该错误就会产生一个异常抛出来,程序的运行也随之终止 2.一个异常分为三部分: 1.异常的追踪信息 2 ... 
- 4月12日 python学习总结 继承和派生
		一.继承 什么是继承: 继承是一种新建类的方式,在python中支持一个子类继承多个父类 新建类称为子类或派生类 父类可以称之为基类或者超类 子类会遗传父类的属性 2. 为什么继承 ... 
- 4月11日 python学习总结 对象与类
		1.类的定义 #类的定义 class 类名: 属性='xxx' def __init__(self): self.name='enon' self.age=18 def other_func: pas ... 
- 5月7日 python学习总结   MySQL数据库(一)
		一.数据库介绍 1.数据库相关概念 数据库服务器(本质就是一台计算机,该计算机之上安装有数据库管理软件的服务端) 数据库管理系统RDBMS(本质就是一个C/S机构的套接字软件) 库(文件夹)===&g ... 
- 5月4日 python学习总结 socketserver
		一.socketserver SocketServer简化了网络服务器的编写. 它有4个类:TCPServer,UDPServer,UnixStreamServer,UnixDatagramServe ... 
随机推荐
- 申请Google AdSense联盟(还没有通过)
			最近我把我的博客移动到了我自己搭建的一个网站上这里,想申请goole联盟,但是连续申请了今天都没有被通过 不知道什么原因,goole没有有回复就告诉你不通过,这让我摸不到头脑, 我网站用的是hexo搭 ... 
- C++ 实现 Parsec
			前一段时间看到了梨梨喵聚聚写的Parser Combinator 在 C++ 里的 DSL, 感觉好厉害, 正好毕设里要写一部分前端, 昨天又把这篇文章看了一遍, 想着我也要用这么酷炫的东西来参与一下 ... 
- suse 12 二进制部署 Kubernetets 1.19.7 - 第08章 - 部署kube-scheduler组件
			文章目录 1.8.部署kube-scheduler 1.8.0.创建kube-scheduler请求证书 1.8.1.生成kube-scheduler证书和私钥 1.8.2.创建kube-schedu ... 
- 图文并茂详解 NAT 协议!
			什么是 NAT 协议 我们的计算机要想访问互联网上的信息,就需要一个地址,而且这个地址是大家(其他主机)所认可的,是公共的,这个地址也叫做公有 IP 地址. 与之相对的,除了公有 IP 地址外,还有私 ... 
- Java多线程Thread类了解和使用
			创建线程的两种方式 extends Thread 类 public class WelComeApp { public static void main(String[] args) { Welcom ... 
- [杂记]CodeBlocks下载、安装及设置
			zyy安装codeblocks十次有九次都会卡在奇怪的地方,所以写篇博文以提醒自己少犯蠢[叹气] 下载 http://www.codeblocks.org/downloads/26 这是官网,以win ... 
- [题解]RQNOJ PID86 智捅马蜂窝
			链接:http://www.rqnoj.cn/problem/86 思路:单源点最短路 建图:首先根据父子关系连双向边,边权是距离/速度:再根据跳跃关系连单向边,边权是自由落体的时间(注意自由下落是一 ... 
- 执行上下文与同步上下文 | ExecutionContext 和 SynchronizationContext
			原文连接:执行上下文与同步上下文 - .NET 并行编程 (microsoft.com) 执行上下文与同步上下文 斯蒂芬 6月15日, 2012 最近,我被问了几次关于 ExecutionContex ... 
- python浅拷贝与深拷贝浅析
			首先我们要明确,python中大多数都是浅拷贝,我们先说原因: 1.时间花费更少 2.内存更小 3.效率更高,浅拷贝只拷贝顶层数据,一般情况下比深拷贝效率高. 容器(如列表)切片是浅拷贝 
- Python——序列与字符串
			序列与字符串 一. 列表 列表是Python的内置可变序列,是包含若干元素的有序连续内存空间.同一列表元素的数据类型可以各不相同,可以分别为整数.实数.字符串等基本类型,也可以是列表.元组.字典.集合 ... 
