- 博客(19)
- 收藏
- 关注
原创 Linux服务器开发,开源框架log4cpp和日志模块实现
前言fwrite到用户缓冲区再write再到内核,相比write直接写入内核肯定是多了一个缓冲区。需要特别注意的是,每次写入数据短<1024时候,fwrite效率更高。每次写的数据多,比如2900,write的效率更高,因为fwrite需要二次拷贝。一、日志写入逻辑log4cpp既拥有c语言风格printf()的日志输出格式,也有c++语言cout<<这种输出格式。可以分模块打印不同的日志文件。 也可以把所有模块的日志也打印同一个文件。 一秒钟打印10000条日志,那肯
2022-03-05 23:04:30 395
原创 skynet设计原理
skynet是一个轻量级的游戏服务器框架;实现了actor的并发模型;可以基于skynet框架去实现业务。多核并发编程多线程在一个进程中开启多线程,为了充分利用多核,一般设置工作线程的个数为 cpu 的核心数;memcached 就是采用这种方式;多线程在一个进程当中,所以数据共享来自进程当中的内存;这里会涉及到很多临界资源的访问,所以需要考虑加锁;多进程在一台机器当中,开启多个进程充分利用多核,一般设置工作进程的个数为 cpu 的核心数;nginx 就是采用这种方式;C
2022-03-03 23:07:37 2775
原创 Linux服务器开发,线程池原理与实现
前言一、线程池究竟解决了什么问题?可能第一感觉是线程池减少线程创建销毁,但是这是站在线程的角度去思考的。 异步解耦的作用 主循环只做一个抛任务,写日志交给线程池,提高了程序运行效率。注重cpu的处理能力的时候才会去粘合,注重的任务的话还是不要粘合为好。APIcreate、init push_task 返回的结果对于业务来说作用不大 destroy、deinit 锦上添花的api:task_count,free_thread。二、线程池的作用线程池是管理任务队列和工作队列的管理
2022-03-02 23:22:03 310
原创 Qemu/Kvm 搭建DPDK 实验平台
与Vmware Player 相比, Qemu/kvm的配置要相对复杂一些. 但是更加接近生产环境.首先需要一台 机器安装有比较新的任何LInux 发布版本. 例如 centos 7, ubuntu 15.04/16.04 皆可. CPU 至少是Intel Sandybridge 或者任何新于SandyBridge的型号. 要求至少4逻辑核以上(HT也算) , 内存4G或者以上 .Guest 本例子采用的是ubutntu 16.04第一步Host 软件安装 :在Host主机上安装好 Qemu/K
2022-03-01 23:17:19 815
原创 全网最详细的Intel CPU体系结构分析(内核源码)
前段meldown漏洞事件的影响,那段时间也正好在读Paul的论文关于内存屏障的知识,其中有诸多细节想不通,便陷入无尽的煎熬和冥想中,看了《计算机系统结构》、《深入理解计算机系统》、《大话处理器》等经典书籍,也在google上搜了一大堆资料,前前后后、断断续续地折腾了一个多月,终于想通了,现在把自己的思想心得记录下来,希望对有这方面困惑的朋友有些帮助。本文主要关注以下几个问题。什么是CPU的流水线?为什么需要流水线? 为什么需要内存屏障?在只有单个Core的CPU中是否还需要内存屏障? 什么..
2022-02-28 23:24:49 1397
原创 Linux服务器开发之(网络编程详解)【上】
网络基础协议的概念什么是协议 从应用的角度出发,协议可理解为“规则”,是数据传输和数据的解释的规则。 假设,A、B双方欲传输文件。规定: 第一次,传输文件名,接收方接收到文件名,应答OK给传输方; 第二次,发送文件的尺寸,接收方接收到该数据再次应答一个OK; 第三次,传输文件内容。同样,接收方接收数据完成后应答OK表示文件内容接收成功。 由此,无论A、B之间传递何种文件,都是通过三次数据传输来完成。A、B之间形成了一个最简单的数据传输规则。双方都按此规
2022-02-16 23:37:04 381
原创 【c++后端开发岗】决战2022年春招,如何备战大厂面试?
最近知乎出现了这样一个热搜:2022年C++开发人员异常难招,怎么破?总结了一下各位高赞的回答,整体是有如下几个观点:1.c++门槛高,开的薪选太低了。2.c++的部分岗位普遍薪资偏低,工作量大且技术单一。比如嵌入式,QT/MFC界面开发等,很难体现出c++的语言优势(高性能、并发、模板元编程、技术栈完备等)3.c++的功能性开发正在被其他语言侵占。比如Java、golang、python,而且更易上手,岗位更多。那么对于即将毕业的应届生来说,c++还是不是一个比较好的选择?我们从提问者的
2022-02-14 23:33:09 204
原创 Linux入门学习-最小白的合理规划
Linux入门的学习还是不难的。主要可以从四大块去学习:一、Linux开发环境1.Linux安装2.命令实用3.shell编程推荐书籍:鸟哥私房菜二、linux c编程1.统计文件单词数量(文件操作)嗨翻C语言2.实现通讯录(结构体)推荐书籍:大话数据结构三、Linux环境编程1.并发下的技术方案(锁)2.实现线程池3.CPU与进程的关系(进程与进程通信)推荐书籍:unix高级环境编程四、网络编程1.DNS请求器(UDP编程)2.实现http请求器(TCP客户端)3.百
2021-12-19 14:38:30 1058
原创 冲破内核瓶颈,让I/O性能飙升~【DPDK工程师手册】
一、什么是DPDK?数据平面开发套件(DPDK [1] ,Data Plane Development Kit)是由6WIND,Intel等多家公司开发,主要基于Linux系统运行,用于快速数据包处理的函数库与驱动集合,可以极大提高数据处理性能和吞吐量,提高数据平面应用程序的工作效率。二、DPDK的主要目的开发DPDK的主要目的,是在数据平面应用中为快速的数据包处理提供一个简单而完善的架构。在理解此工具集之后,开发人员可以以此为基础进行新的原型设计,或简单地为我所用。三、工作环境DPDK的环境.
2021-12-14 11:09:45 1804
原创 c/c++Linux开发高级架构师进阶指南-剑指腾讯T9
c++后端开发是一个庞杂的技术栈,因为没有统一的开发框架并且应用行业非常广泛。所有涉猎广泛,这里就把c/c++后端开发的技术点进行整理总结,看完以后,不会让你失望的。精进基石高性能网络设计基础组建设计中间件开发开源框架性能分析分布式架构上线实战1.精进基石,分为四个方面(数据结构,设计模式,c++新特性,Linux工程管理)数据结构部分设计模式c++新特性Linux工程管理2. 高性能网络设计(网络编程,网络原理,协程ntyco,用户态协议栈ntytcp)网络编程
2021-12-11 11:44:29 841
原创 原子操作是如何实现的?
原子操作对于我们来说,是非常熟悉的概念。从用户角度,可以用原子操作来替换重量级的锁同步,从而提高程序性能。底层实现角度,原子操作可以用于构建各种更重量级的同步操作,比如锁或屏障之类的。对于原子操作的实现来说,需要分开考虑单处理器单核系统,和多处理器系统,多核系统。对于单处理器单核系统来说,只要保证操作指令序列不被打断即可实现原子操作(当然,对于内存的读写操作,需要地址对齐,否则就不是一次的内存读写了,当然也就不是原子操作)。对于简单的原子操作,cpu实现上会提供单条指令,比如INC和XCHG。对于复杂
2021-12-08 10:23:53 916
原创 协程的实现与原理剖析-协程存在的原因?协程能够解决哪些问题?
在我们现在CS,BS开发模式下,服务器的吞吐量是一个很重要的参数。其实吞吐量是IO处理时间加上业务处理。为了简单起见,比如,客户端与服务器之间是长连接的,客户端定期给服务器发送心跳包数据。客户端发送一次心跳包到服务器,服务器更新该新客户端状态的。心跳包发送的过程,业务处理时长等于IO读取(RECV系统调用)加上业务处理(更新客户状态)。吞吐量等于1s业务处理次数。 一堂让你追悔莫及的课, 高屋建瓴谈谈知识体系的建立
2021-12-04 09:00:00 179
原创 原子操作的实现原理
原子(atom)本意是“不能被进一步分割的最小粒子”,而原子操作(atomic operation)意为”不可被中断的一个或一系列操作” 。我们一起来聊一聊在Inter处理器和Java里是如何实现原子操作的。术语定义Cache line(缓存行) 缓存的最小单位Compare and Swap(比较并交换)CAS操作需要输入两个数值,一个旧值(期望操作前的值)和一个新值,在操作期间先比较下在旧值有没有发生变化,如果没有发生变化,才交换成新值,发生了变化则不交换。CPU pipel.
2021-12-02 12:45:00 186
原创 肝了三个月Linux内核,面试薪资直接翻番,我才明白TA的重要性
目录一、学习操作系统(Linux内核)的重要性二、Linux内核的组成部分三、Linux内核源码组织结构四、Linux内核需要重点学习的知识点五、如何开启你的Linux内核学习之路一、学习操作系统(Linux内核)的重要性为什么要学习Linux内核,这个问题我相信很多人都不一定答得上来。只是从技术层上讲,对内核的研究会加深我们的技术的理解,更多的理解源码,是从思想和思考方式上的优化。而在一般的敲代码过程中对于它的实际使用场景并不多。用一句很吊的话说,不懂内核你可以成为一名优秀的码农,但是成.
2021-12-01 12:30:00 184
原创 我的Linux内核学习笔记|网络协议栈
在开始今天的内容之前,其实有一些题外话可以和大家分享一下。自从工作以来,我个人一直都有一个观点。那就是怎么样利用简单的代码来说明开发中的问题,或者是解释软件中的原理,这是一个很高的学问。有些道理看上去云里雾里说不清楚,其实都可以通过编写代码来验证的.os可以、cpu可以、cache可以、编译器可以、网络协议也可以,很多很多的内容完全可以通过几行代码就可以表达得非常清楚,但是事实上我们并没有这么做。我想原因无非是这么几条,一来授业者对相关知识的学习也是停留在概念上而已,二来我们的学习过于死板和教条、太
2021-11-29 23:28:23 589
原创 学了Linux就裸奔上岗的你,拿了多少薪资?
最近听网上很多人说学好Linux就不愁找不到工作,对此大家怎么看呢?对于互联网计算机行业来说,Linux系统是使用率最高的系统,在全球范围内高达80%。虽然不接触计算机行业的朋友永远不会了解到这一点,但这不妨碍Linux在行业内的风靡。而Windows系统相对而言更适合小白,家庭使用,而Linux系统更适合程序员、开发、测试、运维等工作使用。简而言之,学好Linux你就拥有了超大范围的可就业选择。所以学好Linux不愁工作也不是空穴来风的。但也仅仅只是找到工作,对Linux学习更加深入后,大家都会了.
2021-11-26 15:00:00 303
原创 Linux专业分享篇:带你们了解Linux系统内核,以及我的日常调试方法~
Linux 内核已经有三十年的历史了(1991-2021),一开始只有不到一万的代码到现在几千万的代码,不得不佩服人类的智慧了!今天跟大家讲讲Linux内核,在运用的过程中遇到的BUG该如何进行调试!接触过Linux的都知道Kernel的含义,在我看来就是操作系统的核心或者最重要的部分。众所周知的是,几乎整个互联网都运行在 Linux上,从网络协议,到服务器,到你平常访问的绝大多数网站,都能看到它的身影,Linux 内核就是最复杂最流行的开源项目之一。如果你希望学习内核知识,在网上可以搜到无数的资料,
2021-11-24 23:22:22 527
原创 linux C/C++服务器后台开发面试题总结(一)编程语言
面试题总结目录:**一、编程语言二、服务器编程三、Linux操作系统四、网络编程五、算法与数据结构六、系统架构PS:面试题合集直通车**一、编程语言1.根据熟悉的语言,谈谈两种语言的区别?主要浅谈下C/C++和PHP语言的区别:1)PHP弱类型语言,一种脚本语言,对数据的类型不要求过多,较多的应用于Web应用开发,现在好多互联网开发公司的主流web后台开发语言,主要框架为mvc模型,如smarty,yaf,升级的PHP7速度较快,对服务器的压力要小很多,在新浪微博已经有应用,对比很明.
2021-11-24 13:00:00 696
原创 【音视频开发技术概要】技术背景、学习路线、业界大拿、岗位行业分析
音视频的知识纷繁复杂,自学非常困难,既需要非常扎实的基础知识,又需要有很多的工程经验;本文就从音视频开发,开源框架,视频,业界大神,书籍推荐,就业方向分析,为广大开发者学习音视频技术提供便利。首先我们先需要了解音视频包含哪些内容,解决哪些问题?说白了,音视频开发,就是要掌握图像、音频、视频的基础知识,并且学会如何对它们进行采集、渲染、处理、传输等一系列的开发和应用。采集:它解决的是,数据从哪里来的问题渲染:它解决的是,数据怎么展现的问题处理:它解决的是,数据怎么加工的问题传输:它解决的
2021-11-21 10:30:00 366
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人