C++后台开发
文章平均质量分 81
qq_18145605
这个作者很懒,什么都没留下…
展开
-
ERROR - file: /usr/local/src/fastdfs-nginx-module/src/common.c...error info: Permission denied 的解决办法
问题概述 在项目开发的过程中使用到了分布式文件系统FastDFS,各项工作准备完成后(防火墙端口、系统配置文件、远程安全组策略等),上传文件时,是正常的,但是通过浏览器访问时出错了 “ error info: Permission denied ”,查看FastDFS的tracker_server日志,正常!,查看FastDFS的storage_server日志,正常!查看ng...转载 2021-04-17 23:36:15 · 1508 阅读 · 0 评论 -
epoll LT/ET 剖析
目录EPOLL事件的两种模型ET还是LT?EPOLL事件的两种模型Level Triggered (LT) 水平触发socket接收缓冲区不为空 有数据可读 读事件一直触发socket发送缓冲区不满 可以继续写入数据 写事件一直触发符合思维习惯,epoll_wait返回的事件就是socket的状态Edge Triggered (ET) 边沿触发socket的接收缓冲区状态变化时触发读事件,即空的接收缓冲区刚接收到数据时触发读事件socket的发送缓冲区状态变化时触发写事件,即满原创 2021-08-27 19:32:46 · 2047 阅读 · 0 评论 -
Reactor 设计模式
网络IO,会涉及到两个系统对象,一个是用户控件调用IO的进程或者线程,另外一个是内核控件的内核系统,比如发生IO操作read时,它会经历两个阶段:等待数据准备就绪将数据从内核拷贝到进程或者线程因为在以上两个阶段上各有不同的情况,所以出现了多种网络IO模型。一、概念参考:https://www.jianshu.com/p/458e4b276607什么是阻塞和非阻塞?阻塞和非阻塞是针对于IO操作的就绪状态;阻塞和非阻塞是针对于进程在访问数据时,根据IO操作的就绪状态而采取的不同方式,简单原创 2021-08-17 19:22:07 · 474 阅读 · 0 评论 -
线程池原理浅析、java线程池
目录线程池概念线程池原理线程池的工作流程线程池的C实现java线程池线程池的生命周期线程池参数解析线程池的工作流线程池的拒绝策略线程池概念线程池(thread pool)是一种线程使用模式。线程过多或者频繁创建和销毁线程会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着管理器分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价,以及保证了线程的可复用性。线程池不仅能够保证内核的充分利用,还能防止过分调度。线程池原理预先创建预定数量的线程,将多个任务加入到任务原创 2021-08-06 09:22:27 · 291 阅读 · 0 评论 -
nginx线程池浅析
目录nginx线程池nginx线程池简化流程数据结构分析任务队列线程池代码分析入口函数ngx_thread_pool_init_worker线程池初始化ngx_thread_pool_init线程运行函数主线程post任务通知主线程函数ngx_thread_pool_handler线程池结束函数销毁线程池thread_pool线程池的使用示例nginx线程池源代码在ngx_thread_pool.c中nginx线程池简化流程A线程准备任务—>post任务—>线程池唤醒一个线程处理–&原创 2021-08-05 15:04:25 · 1999 阅读 · 1 评论 -
redis专栏
一. 环境介绍redis6.0 + vscodecentos 7 + vscode(wsl插件)二.编译安装 redis$ cd redis-6.0.3$ makemake 之后就编译完成了。有时间还可以 make test$ sudo make install默认安装到/usr/local/bin/目录,对应的命令redis-server 是服务器程序redis-cli 是客户端程序查看版本命令:$ redis-server -v显示:Redis server v=6.0.3 s原创 2021-08-05 10:13:13 · 690 阅读 · 0 评论 -
C10M问题
C10M性能问题 一、引言 随着互联网的高速发展,内容量的提升以及对内容智能的需求、云产业的快速突起,作为互联网的计算基石服务器的形态以及使用成为了炙手可热的话题,全球各家大型互联网公司都持续的在服务器平台上有非常大的动作,譬如facebook的OCP等,而整个服务器的生态链也得到了促进和发展。随着服务器硬件性能的提升和网络硬件的开放,传统PC机的处理性能甚者可以和网络设备相媲美。另一方面SDN技术的发展,基础架构网络逐渐偏向基于通用计算平台或模块化计算平台的架构...原创 2021-08-05 10:10:53 · 559 阅读 · 0 评论 -
解决哈希冲突的三种方法(拉链法、开放地址法、再散列法)
目录开放定址法线性探测再散列二次探测再散列伪随机探测再散列再哈希法链地址法建立公共溢出区优缺点开放散列(open hashing)/ 拉链法(针对桶链结构)封闭散列(closed hashing)/ 开放定址法通过构造性能良好的哈希函数,可以减少冲突,但一般不可能完全避免冲突,因此解决冲突是哈希法的另一个关键问题。创建哈希表和查找哈希表都会遇到冲突,两种情况下解决冲突的方法应该一致。下面以创建哈希表为例,说明解决冲突的方法。常用的解决冲突方法有以下四种:开放定址法这种方法也称再散列原创 2021-08-05 10:09:05 · 4617 阅读 · 0 评论 -
Linux守护进程(Daemon)介绍与实现
1. 守护进程简介守护进程(deamon)是生存期长的一种进程。它们常常在系统引导装入时启动(如果需要守护进程随系统自启动,需要在/etc/init.d目录下放置响应的启动脚本,或者利用systemctl来控制,还有一些其他方法如supervisor等),仅在系统关闭时才终止。因为它们没有控制终端,所以说它们是在后台运行的。 从daemon的启动和管理方式区分,可以将daemon分为两大类:可独立启动的daemon(stand alone)和由一个超级daemon(super daemon)来统一管理原创 2021-08-05 09:58:53 · 1840 阅读 · 0 评论 -
CMake专栏
基本语法规则变量使⽤${}⽅式取值,但是在IF 控制语句中是直接使⽤变量名指令(参数1 参数 2…)参数使⽤括弧括起,参数之间使⽤空格或分号分开。指令是⼤⼩写⽆关的,参数和变量是⼤⼩写相关的。但,推荐你全部使⽤⼤写指令。指令PROJECTPROJECT 指令的语法是: PROJECT(projectname [CXX] [C] [Java])你可以⽤这个指令定义⼯程名称,并可指定⼯程⽀持的语⾔,⽀持的语⾔列表是可以忽略的,默认情况表 示⽀持所有语⾔。这个指令隐式的定义了两个 cma原创 2021-08-05 09:53:58 · 108 阅读 · 0 评论 -
Nginx专栏
Nginx 特性NGINX 使用可扩展的事件驱动架构,而不是更传统的过程驱动架构。这需要更低的内存占用,并且当并发连接扩大时,使内存使用更可预测。NGINX 开发的目标是实现 10 倍以上的性能,优化服务器资源的使用,同时也能够扩展和支持网站的动态增长。 因此,NGINX 成为最知名的模块化,事件驱动,异步,单线程 Web 服务器和 Web 代理之一。nginx的三大主要功能静态web服务器反向代理负载均衡Nginx配置文件解析#user nobody;user root;wo原创 2021-07-29 18:56:12 · 272 阅读 · 0 评论 -
gdb调试--基础
目录gdb1. 文档2. 作用3. 调试GDB的cpp源代码4. 调用GDB的方式1. **直接使用 gdb 指令启动 GDB 调试器**:2. **调试尚未执行的程序**:gdb program3. **调试正在执行的程序**4. **调试执行异常崩溃的程序**GDB调试器启动可用参数常用命令断点break命令tbreak命令rbreak命令watch/rwatch/awatch命令查看当前建立的观察点的数量注意watch命令的实现原理catch命令注意condition命令ignore命令禁用和删除断点原创 2021-07-29 16:26:35 · 324 阅读 · 0 评论 -
GDB 高级调试-多线程、后台调试、多进程、反向调试
目录调试多线程GDB调试多线程程序常用命令查看所有线程调整当前线程为特定线程设置断点设置线程锁GDB non-stop 模式后台执行调试命令暂停后台线程执行多进程调试GDB多进程调试常用命令GDB attach命令调试进程显式指定要调试的进程detach-on-fork选项反向调试GDB反向调试的常用命令handle命令:信号处理查看栈信息frame命令选定要查看的栈帧查看当前栈帧中存储的信息backtrace命令调试多线程GDB调试多线程程序常用命令调试命令功 能info thr原创 2021-07-29 16:26:21 · 4717 阅读 · 2 评论 -
使用log4cplus时遇到的链接错误:无法解析的外部符号 “public: static class log4cplus::Logger __cdecl log4cplus::Logger::get
#include "stdafx.h"#include <log4cplus/logger.h>#include <log4cplus/loggingmacros.h>#include <log4cplus/configurator.h>#include <log4cplus/fileappender.h> #include ...原创 2021-05-17 23:48:59 · 908 阅读 · 0 评论 -
“undefined reference to“ 问题解决方法
"undefined reference to" 问题解决方法 aiwoziji13 2012-03-07 20:13:45 ...转载 2021-04-18 10:30:18 · 2855 阅读 · 0 评论 -
网络io管理-select/poll/epoll编程
网络 IO,会涉及到两个系统对象,一个是用户空间调用 IO 的进程或者线程,另一个是内核空间的内核系统,比如发生 IO 操作 read 时,它会经历两个阶段:等待数据准备就绪将数据从内核拷贝到进程或者线程中。因为在以上两个阶段上各有不同的情况,所以出现了多种网络 IO 模型(1) 阻塞IO(blocking IO)所谓阻塞型接口是指系统调用(一般是 IO 接口)不返回调用结果并让当前线程一直阻塞,只有当该系统调用获得结果或者超时出错时才返回。(2) 非阻塞 IO(non-blocking原创 2021-01-05 18:03:09 · 97 阅读 · 0 评论 -
TCP/IP开发中的设置字段解析
TCP_NODELAYsetsockopt(fd, IPPROTO_TCP, TCP_NODELAY, (char*)&nodelay, sizeof(nodelay));SO_REUSEADDRsetsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (char*)&reuse, sizeof(reuse));SO_SNDBUFsetsockopt(m_socket, SOL_SOCKET, SO_SNDBUF, &send_size, 4);.原创 2021-01-05 18:01:12 · 881 阅读 · 1 评论 -
协程学习笔记
问题:libco, ntyco,libgo,boost协程协程暂只在x86上有用协程是什么?轻量级的调度运行单位协程用在哪里?客户端:服务器:协程用来解决什么问题?同步:请求数据与响应数据,在同一个流程中(优点:逻辑流程清晰,直观)异步:请求数据与响应数据,不在同一个流程中(性能比同步快,当时会出现多个线程抢占资源的问题)同步与异步是用来形容两者之间的关系协程有异步的性能,同步的编程方式协程是如何拥有异步的性能,同步的编程方式?如何把同步操作改为异步?使用king原创 2020-12-21 17:37:41 · 124 阅读 · 0 评论 -
rpc应用与原理学习笔记
概念RPC(remote process call)远程过程调用BRPC支持的协议更多,也支持grpcBRPC 百度开源, 它的资料比较消息无锁队列、cpu cache, (协程M :N(pthread))特点同步常见的负载均衡机制轮询随机哈希REST与rpc的区别1.rest大部分是对外提供公共服务,rpc是内部服务器之间...原创 2020-12-21 17:06:34 · 782 阅读 · 2 评论 -
valgrind 内存检查工具
valgrind1. 编译安装wget https://fossies.org/linux/misc/valgrind-3.15.0.tar.bz2tar -jxvf valgrind-3.15.0.tar.bz2cd valgrind-3.15.0./configuremakesudo make install2. valgrind包含的工具Memcheck。这是 valgrind 应用最广泛的工具,一个重量级的内存检查器,能够发现开发中绝大多数内存错误使用情况,比如:使用未初始化的内原创 2020-09-30 11:09:38 · 224 阅读 · 0 评论 -
make专栏
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar原创 2020-09-23 17:30:38 · 115 阅读 · 0 评论 -
第二篇 面向对象的C++
1. 类1.1 类与对象类是抽象的,不占用存储空间;对象是具体的,占用存储空间;对象是类的一个实例,类是对象的抽象出来的一种具有相似属性的模板。1.2 类与结构体区别:关键字不同,结构体是struct,类是class成员默认访问权限不同,结构体默认public,类默认private在c语言中无类的概念,且struct中不能定义成员函数;在c++中,增加了class类型,同时扩展了s...原创 2018-11-24 10:54:58 · 131 阅读 · 0 评论 -
第三篇 常用STL的使用
STL是一个标准模板库,是一个高效的C++程序库。1.字符串类string方法:data():以字符数组的形式返回字符串内容,但并不添加‘\0’;c_str():返回一个以’\0’结尾的字符数组;(这个数组的数据是临时的,当string对象中的数据改变时,其中的数据就会失效,因此要么现用现转换,要么把它的数据复制到用户自己可以管理的内存中再转换)copy():把字符串的内容复制或写入既...原创 2018-11-25 00:49:06 · 109 阅读 · 0 评论 -
第六篇 TCP协议
1. 专业名词缩写应用层头:ah(Application Header)表示层头:ph(Presentation Header)会话层头:sh(Session Header)传输层头:th(Transport Header)网络层头:nh(Network Header)数据链路层头:dh(Data Link Header)数据链路层报尾:dt(Data Link Terminati...原创 2018-11-29 22:50:56 · 496 阅读 · 0 评论 -
第四篇 编译
本章讲解了从源文件到可执行文件,可重定向文件,可被共享文件的详细步骤,以及中途分析所用到的工具原创 2018-11-26 22:16:53 · 116 阅读 · 0 评论 -
第五篇 调试
在实际开发中,当遇见程序出现bug,无法一眼看出问题点时,需要使用调试的方法来找出原因。调试的方法有以下两种:在程序中插入打印语句,优点是能够显示程序的动态过程,比较容易检查源程序的有关信息;缺点是效率低、可能输入大量无关的数据,发现问题具有偶然性。借助调试工具。下面我们主要来熟悉下各种调试工具的使用,方便更高效的进行调试1. strace 工具strace 就是一个通过跟踪系统调用...原创 2018-11-27 23:41:47 · 130 阅读 · 0 评论 -
第七篇 网络IO模型
IO(Input/Output,输入输出)有两种操作,同步IO和异步IO;网络中的IO由一下四种情况:输入操作:等待数据到达套接字接收缓冲区;输出操作:等待套接字发送缓冲区有足够的空间容纳将要发送的数据;服务器接收连接请求:等待新的客户端连接请求的到来;客户端发送连接请求:等待服务器回送客户端发起的SYN所对应的ACK;当一个网络IO发生时,会涉及到两个系统对象:(1)调用这个IO的...原创 2018-12-05 22:00:43 · 112 阅读 · 0 评论 -
第九篇 多线程
在说多线程之前,我们来回忆下栈的功能和用途:一个栈中只有最下方的帧可被读写,相应的,也只有该帧对应的那个函数被激活,处于工作状态。为了实现多线程,则必须绕开栈的限制。为此,在创建一个新线程时,需要为这个线程建一个新的栈,每个栈对应一个线程。当某个栈指向到全部弹出时,对应线程完成任务,并结束。所以多线程的进程在内存中有多个栈,多个栈之间以一定的空白区域隔开,以备栈的增长。1. 多线程的创建与结束...原创 2018-12-12 01:21:56 · 164 阅读 · 0 评论 -
第一篇 C++编程常用技术
#C++易混淆点##1.关于头文件的包含#include &amp;amp;lt;&amp;amp;gt;常用来包含系统提供的头文件,编译器会到保存系统标准头文件的位置查找头文件#include &amp;quot;&amp;quot;常用于报货程序员自己编好的头文件,用这种格式时,编译器先查找当期目录是否有指定的头文件,然后从标准头文件中进行查找...原创 2018-11-23 00:04:09 · 1268 阅读 · 0 评论