1、带缓冲区事件函数使用流程安装: Linux c libevent库安装(简单使用)原理: bufferevent 有两个缓冲区:也是队列实现,读走没,先进先出 读缓冲:有数据-->读回调函数被调用-->使用bufferevent_read()函数读-->读数据 写缓冲:使用bufferevent_write()-->向写缓冲中写数据(写缓冲一旦有数据就会将数据
1、信号量的概念用于协调多个进程(包括但不限于父子进程)对共享数据对象的读/写。它不以传送数据为目的,主要是用来保护共享资源,保证共享资源在一个时刻只有一个进程独享。1.1、二元信号量信号量是一个特殊的变量,只允许进程对它进行等待信号和发送信号操作。最简单的信号量是取值0和1的二元信号量,这是信号量最常见的形式,1表示可以访问,0表示加锁2、函数介绍Linux中提供了一组函数用于操作信号量,程序中
1、连接池在这里插入图片描述将每一个套接字和一块内存进行绑定,连接池就是一个结构体数组,通过链表来维护一个空闲连接。1、ngx_get_connection(int fd)从空闲链表取一个空闲连接,然后指向头的指针指向后面一个元素,然后将sock对应给到这个空闲连接中,然后返回这个结构体指针。2、ngx_epoll_add_event将监听套接字,添加到红黑树上,3、ngx_epoll_proce
1、下载在这里插入图片描述https://golang.google.cn/dl/下载安装包: wget https://golang.google.cn/dl/go1.18.linux-amd64.tar.gz 解压到opt目录下:(也表示安装成功了) tar -zxvf go1.18.linux-amd64.tar.gz -C /opt/2、添加环境变量# 打开这个文件在文件中添加以下内容
1、命名空间引入主要是为了解决重定义问题,系统中可以定义多个命名空间,命名空间可以定义在多个文件,如果以往没有出现就是定义一个命名空间,如果已经出现过,就代表打开定义的命名空间namespace 命名空间名字 { void way() { } } // 访问命名空间内容:使用作用域运算符:: 命名空间名字::way();2、auto关键字auto自动类型推断,可以在声明变量的时候,根据变量初始值
1、信号的基本概念1、 信号(signal)是软件中断,是进程之间相互传递信息的一种方法,用于通知进程发送了的事件,但是,不能给进程传递任何数据 2、信号产生的原因有很多,在Linux下,可以用kill和killall命令发送信号ps -ef | grep 需要查询的程序 kill 跟随的是进程号 killall 程序名一共有64个信号,每个信号对应自己的默认动作在这里插入图片描述进程状态表在这里
1、构造函数写法优化设计一个类3步: 1、数据一定要放到private里 2、数据传递和返回值尽量使用引用,并审查是否需要加const 3、在类中的函数需要加const的需要变量数值设定有两阶段: 1、初始化(初始列) 2、赋值(在大括号里面赋值)在这里插入图片描述2、new、delete的执行过程在这里插入图片描述在这里插入图片描述3、内存分配和回收红色部分用来记录,开辟内存数,因为开辟内存必须
1、FTP简介ftp(File Transfer Protocol文件传输协议)是基于TCP/IP 协议的应用层协议,用于文件的传输,包括ftp服务器(或服务端)和ftp客户端。ftp客户端与服务器创建网络连接,请求登录服务器,登录成功后,就可以进行文件传输,主要包括开载文件和上传文件两种操作2、安装FTP软件包1、安装ftp服务端yum -y install vsftpd2、安装ftp客户端yu
Hiredis是一个Redis的C客户端库函数,基本实现了Redis的协议的最小集。这里对hiredis的api作基本的介绍以及应用,主要参考hiredis的README文件以及相关源码。1、Ubuntu安装redis服务端Redis全称为Remote Dictionary Server(远程数据服务),是一款开源的基于内存的键值对存储系统,其主要被用作高性能缓存服务器使用,当然也可以作为消息中间
1、atomic使用原子操作,不可分割的操作,要么完整,要么不完整。#include <pthread.h> #include <unistd.h> #include <iostream> #include <atomic> usingnamespace std; atomic<int> g_acount; int g_count =0
1、浏览器访问网页的过程1、回去DNS域名解析服务器,找到对应的ip地址 2、通过ip地址建立TCP连接 3、浏览器发送HTTP请求,服务器接受请求并处理,服务器返回,浏览器接受请求并渲染信息 4、2、OSI七层模型在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述TCP通信流程调用的函数:客户端1、socket()创建socket 2、connect()向
成员函数,重载+号实现两个对象属性相加#include <iostream> usingnamespace std; classPerson { public: // 成员函数重载+ // operator 是关键字 // + 号是你要重载的运算符,想重载-就写- Personoperator+(Person&p) { Person temp; temp.
1、类封装介绍1、ShareMemory类有4个有参构造函数,分别为通过key值连接共享内存,和创建共享内存,通过路径来连接共享内存和创建共享内存。 2、3个公有的成员函数, mapShm连接到共享内存 unmapShm断开连接 delShm删除共享内存 3、SecKeyShm类,继承ShareMemory类,SecKeyShm主要根据自身业务写, 主要功能: 两
1、CPU性能监控1.2、平均负载基础平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数,它和 CPU 使用率并没有直接关系。平均负载其实就是平均活跃进程数。平均活跃进程数,直观上的理解就是单位时间内的活跃进程数。查看cpu个数:grep 'model name' /proc/cpuinfo | wc -l负载说明(现针对单核情况,不是单核时则乘以核数)up
1、Lua和C++交互1、lua和c++交互机制是基于一个虚拟栈,C++和lua之间的所有数据交互都通过这个虚拟栈来完成,无论何时C++想从lua中调用一个值,被请求的值将会被压入栈,C++想要传递一个值给Lua,首选将整个值压栈,然后就可以在Lua中调用。 2、lua中提供正向和反向索引,区别在于证书永远是栈底,负数永远是栈顶。在这里插入图片描述2、基础练习编译指令:g++ test.cpp -
内容来源菜鸟教程,主要总结了一些重要部分和c语言有歧义的部分 https://www.runoob.com/lua/lua-file-io.html1、Linux安装Lua1、下载 wget http://www.lua.org/ftp/lua-5.3.0.tar.gz 2、解压 tar zxf lua-5.3.0.tar.gz 3、进入目录 cd lua-5.3.0 4、编译 make l
1、前言在上一章《Linux C++ 多线程高并发服务器实战项目一》中,讲完了进程相关的一些操作。 1、环境变量搬家,修改进程名字 2、设置信号处理函数,通过waitpid函数回收子进程,防止变成僵尸进程 3、bind绑定ip端口,设置套接字为非阻塞, 监听套接字是否连接 3、进程信号集,防止创建子进程事被信号给中断 4、创建守护进程,脱离终端,在后台运行 5、master进程主要通过sigsus
1、概述1.1、xml介绍XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML 的设计宗旨是传输数据,而非显示数据 XML 标签没有被预定义。您需要自行定义标签。 XML 被设计为具有自我描述性。 XML 是 W3C 的推荐标准1.2、json介绍JSON(JavaScript Object Notation) 是一种轻
1、下载安装oracle官网下载client 地址: https://www.oracle.com/database/technologies/instant-client/macos-intel-x86-downloads.html 不想去官网下载可以到百度网盘下载,可视化工具也在里面 链接: https://pan.baidu.com/s/12PHyTbJDJCC-MjuB9jaFgw 提取
1、pandas简介Pandas(Panel Data的缩写)是一个开源的Python数据处理库,它提供了高性能、易用的数据结构和数据分析工具,用于处理和分析结构化数据。 Pandas的核心数据结构是DataFrame和Series,它们使数据的清理、转换、分析和可视化变得非常便捷。2、Series使用2.1、Series是一种类似一维数组的对象,它由一组数据(各种NumPy数据类型)以及一组与之
1、项目介绍1、按照包头+包体的格式收发数据包,解决粘包的问题 2、非常完整的多线程高并发服务器 3、根据收到数据包执行,不同的业务逻辑函数 用到的技术: epoll高并发通讯技术,用的是水平触发【LT】水平触发模式 通过线程池技术处理业务逻辑 多线程、之间同步技术使用,互斥量、和条件变量 一个master管理进程,多个worker工作进程 信号、守护进程2、项目流程2.1、环境变量搬家1、统计a
1、规划makefile编写a、根目录下放三个文件:1、makefile:是咱们编译项目的入口脚本,编译项目从这里开始,起总体控制作用。 2、config.mk:配置脚本,被makefile包含,单独分处理,为了应付一些可变的东西。 3、common.mk:最核心的编译脚本,定义makefile编译规则,并且各个子目录中都用到这个来编译.c文件的编译b、每个子目录下都有一个叫做makefile的文
1、前言起初使用的是Cmake + Visual Studio 2019进行编译,使用的时候出现ssl错误,刚开始因为是openssl版本问题但是,多次更换版本重新编译,还是不行,可能是微软那一套对开源项目支持不是很友好,但是网上也有编译成功的案例,最终决定改用Mingw这一套进行编译。服务器日志信息: 2023-07-20T01:03:31: New client connected from
概述1、设计模式的分类总体来说设计模式分为三大类: 1、创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 2、结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 3、行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 4、其
1、互斥锁(mutex)#include <stdio.h> #include <stdlib.h> #include <pthread.h> #define __USE_GNU #include <sched.h> #include <unistd.h> #include <setjmp.h> #include <
1、vector 使用动态数组,也叫可变数组,容器的空间是动态增长的,当空间不足时,申请更大一块空间,让后将原数据拷贝到新空间中,并释放原空间在这里插入图片描述1.1、初始化操作int arr[]={1,3,2,5}; // 1、方式一(初始化) vector<int> v1; // 容器尾部插入数据 v1.push_back(1); v1.push_back(2);
1、TCP协议介绍TCP协议是基于IP协议,面向连接,可靠基于字节流的传输层协议 1、基于IP协议:TCP协议是基于IP协议之上传输的,TCP协议报文中的源端口+IP协议报文中的源地址+TCP协议报文中的目标端口+IP协议报文中的目标地址,组合起来唯一确定一条TCP连接。 2、面向连接:与UDP不同,TCP在传输数据之前,需要进行三次握手,建立一条TCP连接,然后在进行数据传输,释放需要进行四次挥
QString与QByteArray互转QString str("Hello World"); QByteArray bytes = str.toUtf8(); // QString转QByteArray方法1 QString str("Hello World"); QByteArray bytes = str.toLatin1(); // QString转QByteArray方法2Q
1、安装ftp客户端yum -y install ftp2、ftp的用户缺省情况下,ftp服务器和操作系统用户名/密码一样,root用户的权限过大,不允许登录ftp服务器。3、登录服务器方法一:输入ftp 服务器ip地址,回车后根据提示输入用户名和密码在这里插入图片描述方法二:输入ftp,用open 服务器ip地址,连上服务器后再输入用户名和密码在这里插入图片描述方法三:输入ftp -n 服务器i
Copyright © 2005-2025 51CTO.COM 版权所有 京ICP证060544号