3.10 学网络编程 协程 osi七层协议-物理层-数据链路层-网络层

1.协程 是用户态的轻量级线程

#-----优点------------
#无需上下文切换
#无需原子操作锁定集同步的开销
#方便切换控制流,简化编程模型
#高并发,高扩展性,低成本,一个cpu支持上万协程 实现高并发处理
#------缺点----------
#无法多核 ,(完善,进程+多协程)
#进行io阻塞,阻塞的是整个程序

#***基于yield实现协程
import time
import queue
def consumer(name):
    print('yanga11ang',name)
    while True:
        new_baozi=yield
        print('%s, is eating baozi %s'% (name,new_baozi))

def producer():
    r=con.__next__()
    r=con2.__next__()
    n=0
    while n<5:
        n+=1
        con.send(n)
        con2.send(n)
        print('%s'% n)

if __name__=='__main__':
    con=consumer('c1')
    con2=consumer('c2')
    p=producer() #函数返回值

#***基于greenlet实现协程 需要安装库
#sudo pip install greenlet
from greenlet import greenlet
def test1():
    print(12)
    gr2.switch()
    print(34)
    gr2.switch()

def test2():
    print(56)
    gr1.swatch()
    print(78)

gr1=greenlet(test1)
gr1=grennlet(test2)
gr1.swatch() #跳转到gr1开始执行被保存的swatch

#***基于gevent实现协程  需要安装库
#sudo pip install gevent
import gevent
def foo():
    print('runing in foo')
    gevent.sleep(1) #阻塞后直接运行其他的协程
    print('swith back to foo')
def bar():
    print('runing in bar')
    gevent.sleep(2)
    print('swith back to bar')

gevent.joinall([
    gevent.spawn(foo), #创建运行协程
    gevent.spawn(bar),
])
#---例子2----爬网页
from gevent import monkey
monkey.patch_all()   #监听i/o阻塞,在win中更好的切换协程

import gevent 
from urllib.request improt urlopen
def f(url):
    print('GET:%s'% url)
    resp=urlopen(url)
    data=resp.read()
    with open('yanga11ang.txt',w) as f:
        f.write(data)
    print('%d bytes received from %s'% (len(data),url))
gevent.joinall([
    gevent.spawn(f,'http://www.python.org'),
    gevent.spawn(f,'http://www.baidu.com')
])

2.如果认知 美国

老友记
琳达看美国

3.网络基础

#操作系统基础
#internet
#   物理连线 :网线
#   统一通信标准:互联网协议
#osi七层协议
#   物理层: 网线 电缆 双绞线 无线电波.高电压1低0 联网基础
#   数据链路层:电信号进行分组,8个二进制是一组 
#       以太网协议 :
#           一组电信号构成一个数据包,叫做帧
#           每一数据帧分成:报头head和数据data两部分
#               head包括:发送者的地址6字节,接受者的地址6字节,数据类型6字节 
#               data包括:最短46字节最长1500字节,数据包的具体内容
#               head+data=最短64 最长1518.超过分片
#       mac地址:
#           每个intert设备都有网卡 每块网卡都有世界唯一的mac地址 48二进制(12为16进制表示,前六位厂商编号,后六位流水线编号)
#           以太网用的地址是mac地址
#       广播:
#           在自己的屋子(局域网)里广播,计算机有嘴和耳朵,不是自己的不要
#       arp协议:获取目标的mac地址 (知道自己的地址,和对方的地址,不知道对方的mac)
#           先算出网段,
#               同一子网,数据包地址是目标mac目标机ip
#               不同子网,网关的mac,目标机ip
#           同一子网
#               发送端主机|发送端mac|FF:FF:FF:FF:FF:FF(表示所有的mac都可以接收)|源ip|目标ip|数据|
#               发现ip地址是自己的,重发回去,对方即可知道自己的mac地址
#           不是自己同一个子网
#               找人帮自己:网关,跨网络发包
#               先用arp协议得到网关的mac地址
#               然后 自己mac 网关mac 自己ip 目标ip(不是网关ip) 
#               最后 通过路由会找到,目标ip的网关
#               目标ip的网关会发送给对方ip机,对方得到自己的mac,发过来后,得到对方的mac
#   网络层: 跨子网通信
#       所有上层的包都要封装以太网头          
#       ip协议
#           主要是ipv4 他规定网络地址有32个2进制位表示
#           范围 0.0.0.0-255.255.255.255
#           一个ip地址通常写成四段十进制
#       ip地址分成两部分
#           网络部分: 在那个房间(子网)里面
#           主机部分: 是房间里的哪台电脑
#       子网掩码:区分网络部分和主机部分
#           网络部分用数字1代表,主机部分全部用数字0代表
#           算出网络部分是ip地址与子网掩码,按位与
#       ip数据包:网络层通信方式
#           ip数据包分为两部分,ip包定义的单独栏位,直接放入以太包的打他部分
#           head:长度为 20-60字节 源ip+目标ip+掩码
#           data:长度为65.515字节
#           以太网数据包,的数据部分只有1500字节,ip数据包,超过了1500只能分多个以太数据包发送
#           以太网头|ip头|ip数据
#
def a():
def b():
def c():
def d():
def e():

这里写图片描述
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值