服务器后端开发
文章平均质量分 91
记录服务器开发相关知识点
code_peak
这个作者很懒,什么都没留下…
展开
-
协程(coroutine)的原理与实现
协程概念协程相当于用户态的线程,更轻量级。线程的调度是操作系统完成的,而协程的调度是由用户态控制。线程相比进程来说,上下文切换快,资源开销变小,但是作为操作系统的,但是多线程如果设计的不够好,可能有大量的锁同步、切换等待。除此之外,如果一个系统的瓶颈在 IO 上,一个线程可能不能完全发挥出它的作用。而协程一般在线程中运行,有用户态的调度器调度,不需要进行反复的系统调用,而且可以利用到线程的并发优势,协程的执行效率极高,在一些高并发系统应用比较广泛。协程可以看作一种使用起来比较特殊的函数,函数的调用一般是原创 2021-11-27 15:34:57 · 5548 阅读 · 0 评论 -
使用火焰图(FlameGraph)分析程序性能
火焰图概念火焰图(FlameGraph)是 svg 格式的矢量图,是先通过 perf 工具分析得到的结果,并将其生成的具有不同层次且支持互动的图片,看起来就像是火焰,这也正是它的名字的由来。其表现形式大概如下所示:需要有以下几点注意:纵向(Y 轴)高低不平,表示的是函数调用栈的深度。每一层都是一个函数。调用栈越深,火焰就越高,顶部就是正在执行的函数,下方都是它的父函数。横向(X 轴)表示该函数执行消耗的时间,横向上会按照字母顺序排序,而且如果是同样的调用会做合并(注意:如果一个函数在 X原创 2021-10-17 17:55:11 · 25875 阅读 · 0 评论 -
ProtoBuf详解(二)编码风格
本片文章主要介绍 protobuf 的编码风格,这些都是 google 官方推荐的 proto 文件编码风格,遵循这些风格编写 proto 风格,可以使团队的 ProtoBuf 消息定义和风格保持一致,有利于阅读和维护。protobuf 的风格可能会随着不同版本变化,有可能会看到 .proto 文件以不同的风格编写,但是最好采用当前的最佳风格,请参考官方 Protobuf Style Guide。文件的标准格式每行的长度保持在 80 个字符以内。使用 2 个空格缩进。(注:这里实际使用 4 个空格原创 2021-09-05 17:26:56 · 644 阅读 · 0 评论 -
ProtoBuf详解(一)概念和语法
关于ProtoBufProtoBuf 是谷歌开源的一套与语言无关,平台无关,可扩展性强,兼容性好并且效率很高的数据序列化方法,非常适合用于做二进制数据的通信协议和数据存储。这里可以访问官方文档。很多人都喜欢将 ProtoBuf 和 XML 和 JSON 这两个常用于网络通信和数据交换的格式做比较,但我觉得这并不合适,因为完全就是两个侧重点。首先 ProtoBuf 的突出点是在二进制序列化方面,而另外两者都是突出字符串文本的可读性上,其效率当然是 ProtoBuf 快的不是一点,其次 ProtoBuf原创 2021-08-15 23:51:23 · 3035 阅读 · 0 评论 -
backtrace函数与assert断言宏封装
这篇文章是在阅读 sylar 框架时,对断言宏的封装所做的总结。在实际开发中,我们经常会遇到一种境况:如果程序执行的不是我们想要的正确结果,需要程序立即中断执行,我们希望得到其有效的错误信息,比如其出现错误的函数、文件、代码行号、和参数文本、调用堆栈信息等。通常我们会在程序中使用断言 assert,因为如果出现了不符合条件的情况,程序将终止执行,而且会打印出一些有限的信息。assert 函数断言就说明是绝对不可能出现的错误,一旦出现就不能让程序继续执行下去,而且需要在 debug 阶段将 assert原创 2021-07-21 00:17:17 · 730 阅读 · 1 评论 -
gcc编译选项及动/静态库
1. 编译过程预处理 (加 -E 选项生成 .i 文件)-E 选项指示编译器仅对输入文件进行预处理,预处理文件的拓展名是 .i 。g++ -E test.cpp -o test.i编译 (加 -S 选项生成 .s文件)-S 选项告诉编译器在为 C++ 代码产生了汇编语言文件后停止编译,g++ 产生的汇编语言文件的缺省扩展名是 .s 。g++ -S test.i -o test.s汇编 (加 -c 选项生成 .o 文件)-c 选项告诉编译器仅把源代码编译为机器语言的目标代码,缺原创 2021-07-13 13:15:04 · 1694 阅读 · 0 评论 -
布隆过滤器(Bloom Filter)的原理和应用
布隆过滤器的概念布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。如果想要判断一个元素是不是在一个集合里,一般想到的是将所有元素保存起来,然后通过比较确定。链表,树等等数据结构都是这种思路。但是随着集合中元素的增加,我们需要的存储空间越来越大,检索速度也越来越慢(O(n),O(logn))。不过世界上还有一原创 2021-07-14 00:46:05 · 575 阅读 · 0 评论 -
Base64原理和实现
Base64 概念Base64已经成为网络上常见的传输8bit字节的编码方式之一。一般在做数据的传输时,系统之间的报文交互都需要使用Base64对明文进行编码,然后再进行加密,最后才传输。那么Base64的作用是什么?在数据传输时经常遇到一类情况:使用全ASCII英文字母没问题,但是涉及中文就会乱码,或者网络传输的字符并不完全时可打印的字符,如二进制文件、图片等。Base64就是为了解决此问题,它是基于64个可打印的字符来表示二进制的数据的一种方法。电子邮件刚问世时,只能传输英文,但后来随着用户增加,原创 2021-07-14 00:43:51 · 396 阅读 · 0 评论 -
UDP并发服务器思路
UDP并发与TCP并发的区别在TCP并发编程中,通常使用one loop per thread的并发模型,也就是使用多个线程,每个线程中都有一个epoll loop,无论是使用epoll还是poll或select,在观察有无数据就绪时,都是针对多个文件描述符。如果只有一个文件描述符,那么进程只要观察那一个文件描述符即可。网络编程中,一个Socket对应一个文件描述符。在TCP的并发中,服务器在监听端口初始化一个socket套接字描述符,接受客户端后就与每个客户端的连接有一个不同的文件描述符,所以TCP并原创 2021-07-14 00:39:06 · 3698 阅读 · 1 评论 -
CMake教程及使用案例
转载:https://www.hahack.com/codes/cmake为什么需要CMake如果你一直在windows平台上开发,使用最多的可能就是VS的开发环境,它已经集成了全套的开发环境包括构建编译等。你或许听过好几种 Make 工具,例如 GNU Make ,QT 的 qmake ,微软的 MS nmake,BSD Make(pmake),Makepp,等等。这些 Make 工具遵循着不同的规范和标准,所执行的 Makefile 格式也千差万别。这样就带来了一个严峻的问题:如果软件想跨平台,必须转载 2021-07-14 00:27:34 · 703 阅读 · 0 评论 -
CMake命令和重要指令
CMake 命令分类CMake命令主要分为以下四种:脚本命令(始终可用)项目命令(仅在CMake项目中可用)CTest命令(仅在CTest脚本中可用)不推荐使用的命令(已弃用,仅可用于维护向后兼容性。每个命令的文档都声明了不推荐使用的CMake版本。不要在新代码中使用这些命令)脚本命令breakcmake_host_system_informationcmake_languagecmake_minimum_requiredcmake_parse_argumentscmake_p转载 2021-07-14 00:25:24 · 633 阅读 · 0 评论