Android面试题 之 网络通信基础面试题

简介: 序列化对比:Serializable码流大、性能低;XML人机可读但复杂;JSON轻量、兼容性好但空间消耗大;ProtoBuff高效紧凑。支持大量长连接涉及系统限制调整、缓冲区优化。select/poll/epoll是IO多路复用,epoll在高连接数下性能更优且支持边缘触发。水平触发持续通知数据,边缘触发仅通知新数据。直接内存减少一次拷贝,零拷贝技术如sendfile和MMAP提升效率。关注公众号"AntDream"了解更多技术细节。

本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点

序列化

判断标准
  • 序列化后的码流大小
  • 性能
  • 跨语言
Serializable方式
  • 码流偏大
  • 性能较低
XML方式
  • 人机可读性好
  • 文件格式复杂、占带宽
JSON
  • 轻量级、兼容性好、格式简单,人机可读性较好
  • 可读性没有XML好,额外空间消耗比较大
ProtoBuff

如何让单机的应用程序支持几十万至百万级别的长连接?

  • 首先要突破系统对应用进程的线程数限制:ulimit -n 1000000
  • 还要突破软限制和硬限制:cat /etc/security/limits.conf;改完以后还要该so,让系统重新加载这个文件
  • 操作系统的限制,所有进程的文件连接数的限制
  • socket通信时,每个socket都有2个缓冲区,一般是4K*2,连接数过大,内存就会很高,就需要把这个缓冲区调小一点:SO_SNDBUF;SO_RCVBUF

select、poll、epoll的区别?

  • 都是操作系统实现的IO多路复用的机制
  • select是操作系统都支持的,poll和epoll主要是在类UNiX的操作系统中支持
  • 支持一个进程所能打开的连接数限制不一样:selector是1024个(64位上面可以变成2048);poll和select没有太大区别,不过连接上select是用数组来维护,poll是链表维护,最大连接数上poll是没限制的;epoll没有什么限制,只受限于机器内存的大小
  • 连接数激增时的效率不同:当连接数上升到几十万百万的时候,select和poll性能会急剧下降,而epoll跟总连接数没有关系,只能活跃的连接有关,性能基本不变
  • 消息的传递方式:select和poll在每次消息调用中都需要将很多数据从用户空间拷贝到内核空间;epoll不需要(共享一块内存)
  • 怎么选择?:连接数比较少又比较活跃的时候,select和poll可能性能更好
  • select、poll只支持水平触发,epoll默认是水平触发,也支持边缘触发

水平触发(LT)和边缘触发(ET)?

水平触发:socket的接收缓冲区里有数据来了,只要缓冲里有数据,select、poll或者epoll就都会一直收到通知

边缘触发:只有在有新数据到达socket的缓冲区时才会触发

直接内存比堆内存快在哪里?

直接内存避免了二次拷贝,如果buffer在堆上,就需要先从堆拷贝到应用进程缓冲区,再从应用进程缓冲区拷贝到内核套接字缓冲区,再发送到网络,直接内存少了从堆拷贝到应用进程的这一步。

数据从应用进程缓冲区拷贝到套接字发送缓冲区时,内存是不允许发生变化的,不能失效的

什么是零拷贝

指计算机执行操作时,CPU不需要先将数据从某处内存复制到另一个特定区域。

DMA:direct memory access,用于接收CPU的指令负责去IO拷贝。会把文件数据拷贝到内核缓冲区,再拷贝到用户空间

零拷贝技术可以减少数据拷贝和共享总线操作的次数,消除传输数据在存储器之间不必要的中间拷贝次数,从而提高数据传输效率

传统数据传送过程

磁盘 -->DMA拷贝到内核文件读取缓冲区 -->CPU拷贝到应用进程缓冲区 --> CPU拷贝到套接字发送缓冲区(应用进程到内核进程) --> DMA拷贝到网络设备(网卡)

4次拷贝,4次上下文切换

内存映射:MMAP

把文件映射到应用进程的某段内存区域里面,减少CPU拷贝到应用进程的步骤

Linux之sendfile

DMA将文件拷贝到文件读取缓冲区后,直接进行CPU拷贝到套接字发送缓冲区,都在内核空间中,省去了从应用进程周转的拷贝

3(2)次拷贝2次上下文切换

Linux之slice

在上面的基础上,文件缓冲区和套接字缓冲区之间用了管道机制PIPE,管道实际上就是共用了一段内存

2次拷贝,2次上下文切换

Java JDK里面的零拷贝主要是MMAP和sendfile,sendfile比如FileChannel的transferFrom


欢迎关注我的公众号AntDream查看更多精彩文章!

目录
相关文章
|
12月前
|
API 数据处理 Android开发
Android网络请求演变:从Retrofit到Flow的转变过程。
通过这个比喻,我们解释了 Android 网络请求从 Retrofit 到 Flow 的转变过程。这不仅是技术升级的体现,更是反映出开发者在面对并发编程问题时,持续探索和迭求更好地解决方案的精神。未来,还会有更多新的技术和工具出现,我们期待一同 witness 这一切的发展。
411 36
|
10月前
|
Web App开发 缓存 JavaScript
Android网络小说阅读器的实现
小说阅读Demo,。此Demo使用Jsoup解析HTML,实现小说数据抓取(数据源自网络),并包含自定义View、六章小说缓存等功能,但未实现下载。项目还包括屏幕适配、字体设置等,借助第三方框架完成优化。以下是主页、详情页、阅读页等界面展示。
312 0
|
XML JavaScript Android开发
【Android】网络技术知识总结之WebView,HttpURLConnection,OKHttp,XML的pull解析方式
本文总结了Android中几种常用的网络技术,包括WebView、HttpURLConnection、OKHttp和XML的Pull解析方式。每种技术都有其独特的特点和适用场景。理解并熟练运用这些技术,可以帮助开发者构建高效、可靠的网络应用程序。通过示例代码和详细解释,本文为开发者提供了实用的参考和指导。
469 15
|
存储 网络协议 安全
30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场
本文精选了 30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场。
2068 2
|
缓存 算法 网络协议
一文详细理解计算机网络 - 数据链路层(考试和面试必备)
这篇文章详细介绍了计算机网络中数据链路层的概念、基本问题、点对点信道和广播信道的数据链路协议(如PPP和CSMA/CD),以及局域网和以太网的相关知识。
3993 0
一文详细理解计算机网络 - 数据链路层(考试和面试必备)
|
存储 缓存 网络协议
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点,GET、POST的区别,Cookie与Session
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点、状态码、报文格式,GET、POST的区别,DNS的解析过程、数字证书、Cookie与Session,对称加密和非对称加密
|
网络协议 算法 网络性能优化
计算机网络常见面试题(一):TCP/IP五层模型、TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议
计算机网络常见面试题(一):TCP/IP五层模型、应用层常见的协议、TCP与UDP的区别,TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议、ARP协议
|
网络协议 Shell 网络安全
解决两个 Android 模拟器之间无法网络通信的问题
让同一个 PC 上运行的两个 Android 模拟器之间能相互通信,出(qiong)差(ren)的智慧。
362 3
|
存储 网络协议 网络性能优化
一文详细理解计算机网络体系结构(考试和面试必备)
这篇文章提供了C++基础知识的快速概述,包括C++的特点、面向对象设计、组成部分、标准、学习建议、应用领域、源文件、编译器、类与对象、编译执行步骤、分号与块、标识符、基本数据类型、typedef、枚举类型、变量定义与声明等。
827 0
一文详细理解计算机网络体系结构(考试和面试必备)
|
存储 缓存 Java
Android--面试中遇到的问题总结(一)
版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/chaoyu168/article/details/56479430 一、handl...
1450 0

热门文章

最新文章