• 网络编程


    宏哥分享的大作,不分享出来,就埋没了

    本次分享主要针对TCP协议,不涉及UDP等其它网络协议。




    网络编程的核心接口------》建立连接。数据收发

    client使用connect发起连接,server端使用listen监听和accept建立连接。图里面少了一个重要的函数。socket——创建套接字,两边都要使用。

    连接过程:backlog。在连接建立完毕之前的连接请求的个数。超过这个数值。则连接请求被拒绝

    数据收发过程:每一个已连接的socket都有一个相应的发送缓冲区和接收缓冲区。当发送缓冲区满时,发送请求会被堵塞。当接收缓冲区空时。接收请求会被堵塞。

    堵塞会引起线程/进程的切换,影响系统的总体的性能。

    能够使用select、pool、epool来统一控制I/O,从而模拟一种非堵塞的模型。

    仅仅有发送缓冲区有空余和接收缓冲区有数据时,才进行数据的收发,使得业务线程不会由于网络I/O而发生堵塞。

    堵塞并不一定总比非堵塞低效,由于堵塞实际上是释放了处理器资源。因此假设并发的线程/进程比較多。临界区比較大的话,非堵塞机制会使得非工作的进程也争抢CPU时间片。

    信号是Unix系统提供的机制。能够理解为软中断。能够用于进程间发送通知。




    服务端和client的高效的编程模式。

    服务端:使用非堵塞I/O,实现业务逻辑和I/O的解耦。提升服务的效率。

    I/O模式:Reactor和Proactor,Proactor的模式会更高效一些。

    要谨慎选择等待队列的大小,以免请求被无理的拒绝或者造成无谓的服务延迟。


    RPC的核心是数据的跨平台的解析-》序列化与反序列话,一个统一的中间语言IDL至关重要。

    为什么要Thrift与Protobuf?
    RPC不可避免的须要序列化与反序列化工作。这样的工作简单可是繁琐,不仅每一个字段都要进行,并且要注意处理网络序和主机序。


  • 相关阅读:
    4.26上午
    4.25下午
    4.19上午
    4.18上午
    7.26
    7.25
    7.21-7.22
    7.22
    7.21
    7.11-7.15
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/7133920.html
Copyright © 2020-2023  润新知