网络编程


计算机要能投入使用要包含三大块:
应用软件
系统软件
硬件

网络

互联网协议实现了联通全世界的通信
五层协议:

  1. 物理层:传输一堆二进制电信号
  2. 数据链路层:分组标准(以太网协议Ethernet),规定了一组电信号称之为一个数据包,一个数据包分为两部分:报头(18个字节)和数据
  3. 网络层:IP地址

网络编程

socket(套接字)抽象层:封装好的提供给开发者的网络接口
在这里插入图片描述
family(socket家族)
socket.AF_UNIX:用于本机进程间通讯
socket.AF_INET:网络编程使用的

socket type类型:
socket.SOCK_STREAM #for tcp
socket.SOCK_DGRAM #for udp
socket.SOCK_RAW #原始套接字

简单的通信

模拟ssh远程命令
涉及:os模块,subprocess模块
1.os.system(命令)
执行命令,返回成功与否的标志
2. subprocess.Popen(‘dir’, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
管道原理,如果命令正确stdout取走结果,如果命令错误则stderr取走结果

sys.argv

一个从程序外部获取参数,sys.argv其可以看作是一个列表,第一个元素是程序本身,随后才依次是外部给予的参数。

粘包

粘包问题只存在于TCP中,Not UDP
服务端接收客户端发来的东西,它又太长超过了recv(数值)的值时,服务端再去执行接收,会发现收到的不是该有的结果而是上一条的部分结果(IO缓冲区),这就叫做粘包,就是指两次结果粘到一起了

并发编程

可在不同进程间来回切换提高CPU运行效率,给用户有一种同时进行的感觉

多道技术

解决了多个程序共享同一个资源的有序调度问题,解决方式:多路复用(时间上和空间上的复用)

并发与并行的区别

并发其实是伪并行,单个CPU+多道技术实现并发
并行必须具备多个cpu才能实现并行

进程

一个程序运行几次就是几个进程。进程就是程序进行的一个过程或者任务,由CPU负责执行(也可以把进程当作一个资源集合,可以细分成一个个线程,线程才是CPU上的执行单位)

开启子进程

from multiprocessing import Process
*multiprocessing模块用来开启子进程(和多线程模块threading的编程接口类似)
*multiprocessing模块提供了Process、Queue、Pipe、Lock等组件
p = Process(target=, …)
p.star()

查看进程pid,ppid

import os
os.getpid()
os.getppid()

僵尸进程
孤儿进程
Process的其他方法

.join() 子进程执行完毕以后才继续运行,否则原地阻塞
.terminate()
.is_alive()

守护进程

.daemon = True
其一:守护进程会在主进程代码执行结束后就终止
其二:守护进程内无法再开启子进程,否则抛出异常:AssertionError: daemonic processes are not allowed to have children

互斥锁

把并行程序里的线程内某一段代码变成串行,牺牲了运行效率,但保证了数据安全
lock=Lock()
lock.acquire()

…(确保代码不会错乱)
lcok.release()

Queue(底层就是以管道和锁定的方式实现)

Queue是多进程安全的队列

q = Queue(maxsize队列允许的最大个数)
q.put() #插入数据到队列
q.get() #从队列读取并且删除一个元素
q.full() #到达maxsize个返回True
当队列put满了阻塞,get空了阻塞
但需要明确:
1、队列内存放的是消息而非大数据
2、队列占用的是内存空间,因而maxsize即便是无大小限制也受限于内存大小

生产者消费者模型

1、程序中有两类角色:
一类负责生产数据(生产者)
一类负责处理数据(消费者)
2、引入生产者消费者模型为了解决的问题是
平衡生产者与消费者之间的速度差
程序解开耦合
3、如何实现生产者消费者模型
生产者<—>队列<—>消费者

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值