网络并发补充

网络编程

  • 协议:
    tcp和udp的区别
    tcp:流失传输,好比双方有个管段,水可以源源不断的流,数据较安全。安全可靠,平时所有东西几乎都是tcp,手机向后端发送数据,拿到了新闻信息。浏览器浏览信息等网络相关的都是tcp,创建连接再收发,三次握手四次挥手

udp:块式传输,好比冰块一块一块地扔,不是连续的。且扔的时候可能丢到别处去了,到不了他那,数据不安全。由于没有连接,速度快。对数据不太关注的,平时网络视频卡不影响整体效果,语音,使用的udp。无须创建连接收发,

arp

  • 简述osi5层模型
    会话
    应用
    传输
    网络
    数据链路层
    物理
  • tcp三次握手四次挥手
    问: 我能连你吗
    答:你能连我
    好的,那我去连你了

可以断开连接吗
可以断开,但我可能数据还没有处理完,我还要处理完
过了1秒,我可以断开了
断开就断开
图解tcp,图解http

  • 粘包
    为什么会出现粘包
    发两条数据,不知道这两条数据的界限。数据和数据之间传输,发个数据先到达缓冲区,从缓冲区发到对方的缓冲区,缓冲区是系统自带的,而代码是要区缓冲区把数据拿走,recv(1024),一次从缓冲区取多少自己走最多。发了两次速度特别快,全到了对方的缓冲区了,叠在一起了,读取时不知道一次读取多少个字节
    如何解决
    strack模块
    所以传输一份数据时传输数据和数据头,数据头规定了放多少字节,永远不变,读取时先读取头的几个字节,后面的数据就是 体,紧接着读取数据头,再读数据体。 封装数据头和数据。
  • 简单的socket
    socket衍生web框架

并发编程

  • 进程
  • 线程
  • 协程
    进程是计算机资源分配的最小单元,
    一个进程中可以有多个线程,线程是cpu调度的最小单元
    协程本身在计算机中不存在,是程序员通过代码实现的,
    协程一定能提高并发吗?
    一个人一天生产100个水杯
    再买个机器:资源浪费
    我当成线程,一个工厂一个进程。在开一个工厂,不得已开的进程。 开线程能达到一样的效果就业开线程,节省资源。
    手速慢,再招个人,节省资源
    协程目的:提高并发。
    人的效率低,偷懒,不停的工作,没有闲着,
    协程就是这个人在干这件事时的空档再去干另外一件事。
    如果用到极致,再开不会提高效率,来回走时浪费效率,有io等待才可以提高并发。如果没有io协程不会提高效率
  • io等待
    操作系统,输入输出,爬虫,网络延迟
  • GIL锁
    全局解释器锁,python特有的,如果利用多核优势做计算只有多开进程。反之不需要用cpu时(io操作,直接交给驱动做的,不用交给cpu进行调度)开多线程,只是比多进程资源消耗地少一些,协程做io更合适,所以io时协程>多线程。java开线程能利用多核优势
    同一时刻一个进程只有一个线程被cpu调度
    结论:
    计算型操作:开多进程。
    io操作:开协程,但协程不能过度,过度也会效率低。
    gil锁不能保证数据安全,因为可能执行到一半到时间了,下个线程又出去处理同一个数据,保证数据安全需要用RLock
  • 进程之间数据是否可以共享:不可以。如果双方同意强制共享。如建立一个管道pipi,队列Queue,信号signals,manager,内存之间的数据共享。也可以通过第三方组件,进程都可以连接数据库,文件,redis。
    如scrapy可以让多个进程来我这取数据(url),多个进程共享我的这份文件。
  • 进程池,线程池
    不能来一个功能创建一个线程,会导致这个程序越来越慢,无法控制请求来的并发量,如果并发来了10万个,不可能开10万个进程或线程,效率很低。
    from concurrent.futures import ThreadPoolExcutor, ProcessPoolExecutor
  • 线程数据共享
    两个线程共同操作同一份数据不安全,
    线程安全:多线程来了数据不混乱。加锁,永远保证数据同一时刻多个人操作。
    如:
    queue
    列表,列表自动加锁
  • 协程
    人为创造出来的
    greenlet:
    单纯的协程,实现切换
    做协程的模块,微线程,协程仅仅是用来切换,在线程完成一个事时,在这干一会,在那干一会,先执行某个函数一行代码,再切换执行另外一个函数2行代码,再切换执行,再切换执行。单纯的协程不一定能完成并发,提高效率。来回跳时也浪费时间。无法做到io切换。只是程序员控制什么时候跳switch,可以让函数依次执行,直接执行效率更高。所以单纯的协程并不能提供效率,只有遇到io切换时效率才高。协程才有意义。
    gevent
    让协程遇到io就切换
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值