zoukankan      html  css  js  c++  java
  • 网络编程

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

    本次分享主要针对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不可避免的须要序列化与反序列化工作。这样的工作简单可是繁琐,不仅每一个字段都要进行,并且要注意处理网络序和主机序。


  • 相关阅读:
    Linux下登录Oracle命令行时删除键^H解决方法
    Centos7 根目录存储空间扩展方法
    js取单选按钮,复选按钮的值
    根据地址-地名获取对应的经纬度
    根据中文获得首字母大写————适用于生成编号-流水号
    邮箱格式验证demo
    百度编辑器UEditor,地址栏传值长度有限-在webConfig配置
    基于ASP.Net +easyUI框架上传图片,实现图片上传,提交表单
    Js基础知识-入门
    基础面试题——Javascript
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/7133920.html
Copyright © 2011-2022 走看看