基础组件/第三方常用库
文章平均质量分 93
yun6853992
走在不知道到知道,知道到懂得,懂得到做到,做到到试图分享的路上。
感激每一个对我提出问题的人,感谢每一个善意鼓励我的人。
展开
-
日常小知识点之序列化结构(protobuf使用及简单原理)
很早的时候用过protobuf,但是近年项目中用的少,但是面试的时候,突然被问到protobuf的底层原理,一直以为自己会,却也难免语塞,就对这个问题记在心头。这里的目标是通过简单实例,了解一下protobuff的底层逻辑(序列化方式)。0:相关类型1:概述protobuf本质上说是定义好(序列化/反序列化)的一种协议,设计协议需要考虑:==》1:序列化和反序列化(TLV,文本流,固定格式(tcp/ip))==》2:判断包的完整性(固定大小,特定符号分界,固定包头+包体结构(tcp/udp),原创 2021-12-23 18:33:51 · 1878 阅读 · 1 评论 -
日常小知识点之用户层网络缓冲区(固定内存,ringbuffer,chainbuffer)
1:网络缓冲区理解1.1:理解背景我们在网络编程时,通常以五元组,一个fd标识一个连接(套接字fd)。==》每个连接其实有接收消息和发送消息的功能。==》内核为每个连接分配了固定大小的发送缓冲区和接收缓冲区(套接字缓冲区)。==》我们通过相关api接口(如send(),recv())根据五元组标识操作对应缓冲区。以网络通信为例理解,个人理解如下:注释: 这里套接字fd对应的缓冲区中的数据,其实是由内核协议栈解析后,我们实际发送/接收的数据。(udp/tcp协议,由内部协议栈处理,我们关注的是原创 2021-12-21 16:30:57 · 2004 阅读 · 0 评论 -
日常知识点之公开课内存碎片优化(内存池)
不善言谈,身边缺少技术大牛交谈,项目缺少使用技术机会,主动知道知识,汲取知识,理解知识的渠道就屈指可数(论大厂的重要性)。在闲暇的时候就在b站看看一些自己没有理解的知识点,在时常无事的时候也会关注腾讯课堂的一些公开课,只是让自己不那么菜。以前学过内存池,跟着老师用手写的方式实现过c的内存池代码,也看过nginx的内存池,在自己的角度对内存池的概念,实现有一定的认知。但有一次面试,面试官问到内存池的实现原理,如果基于内存池用new对对象进行内存申请如何实现?===》 第一次思考这个问题,当时却懵了,感原创 2021-12-20 00:03:06 · 1575 阅读 · 0 评论 -
nginx分布式锁以及accept锁简单整理
仅供个人学习整理,很多理解来自网络。1:什么是锁,为什么需要锁?当多个进程/线程需要共同操作一块共有资源时,如果不对这块资源加以保护,就会出现问题。我的理解是,对共有资源加以保护,控制多个使用者对这块资源的访问机制,叫做锁。2:临界资源的访问控制手段。1:如过临界资源使用简单,可以相关原子操作函数。2:加锁的方式: 自旋锁,互斥锁(条件变量 控制流程)3:其他:读写锁,分布式锁等3:初步了解nginx锁1:nginx中的自旋锁 ngx_spinlock.cvoid ngx_spinlo原创 2021-07-22 17:52:24 · 674 阅读 · 0 评论 -
ntyco协程的理解
早在很久之前第一份工作,就接触使用过协程,对它只有只可理解不可言说的概念,这里通过对ntyco协程代码的理解,梳理一下自己对协程的理解。1:协程的概念总是把协程俗称为用户态线程,我的理解是,协程依托于线程上执行子例程,由用户态把控协程的调度及上下文。2:协程的性能协程的性能差不多和线程池的性能相同,差不到哪里去(多线程有线程调度切换开销,协程有管理节点的内存消耗)总结:协程同步的变成方式,可以达到异步的性能。3:什么时候使用协程百科上说:适合于用来实现彼此熟悉的程序组件,如合作式多任务,迭代器原创 2021-07-06 14:30:03 · 815 阅读 · 0 评论 -
c实现模块开发的一个技巧
在实现线程池的功能时,遇到一个c语言模块开发的技巧,愚笨的自己耗费了好大的精力去理解相关的代码逻辑,这里做了相关的整理:1:对这个思路的理解: C语言是面向过程开发的,但是可以用一定的技巧,参考C++面向对象的技巧,有效的组织代码架构。 基于此思路,实现下面一套适用于c语言的模块开发的技巧:1:定义基础的结构,确定实现包裹函数。2:定义业务结构体,一个void*的指针和需要的数据结构。3:实例化一个变量,根据基础的结构,包含了业务结构体数据结构大小和实际的执行函数。4:调用包裹函数,传原创 2021-06-26 09:52:46 · 218 阅读 · 0 评论