服务器开发
文章平均质量分 68
Jxiepc
一个努力向上的男同志
展开
-
【Linux多线程服务端编程】| 【05】高效的多线程日志
【C++模块实现】| 【01】日志系统实现【日志类型】【诊断日志】:log4j、logback、log4cxx、log4cpp等;【交易日志】:数据库的write-ahead log、文件系统的journaling等,通过回放日志可逐步恢复每一次修改后的状态;【日志功能】:日志通常用来故障诊断和追踪、性能分析等;对于关键线程,需要记录:收到每条内部消息的id等;收到的每条外部消息的全文;收到的每条消息的全文,每条消息都有全局唯一的id;关键内部状态的变更,等;【日志库】原创 2022-09-28 14:55:25 · 918 阅读 · 0 评论 -
【Linux多线程服务端编程】| 【04】C++多线程系统编程精要
从某个TCP连接A收到req,程序处理它需要一定时间,为了避免阻塞,程序需记住发来的req,在某个线程池中处理;但处理req时,客户端断开连接,而另一个客户端连接B;函数,则修改的变量必须为sig_atomic_t类型,从而优化了内存访问;【FD_CLOEXEC】:让exec时,进程自动关闭这个文件描述符;:每个磁盘配一个线程,把所有对此磁盘IO都挪到同一个线程;【O_NONBLOCK】:开启非阻塞,文件描述符默认为阻塞;的情况下,全局数据可能被其他线程修改,导致后续可能出现。同步IO:阻塞与非阻塞;原创 2022-09-27 20:00:51 · 985 阅读 · 0 评论 -
【Linux多线程服务端编程】| 【03】多线程服务器的适用场合和常用编程模型
【例2 计算密集型】:多线程分担负载,若我们要左一个求解Sudoku的服务,这个服务程序在9981端口接受请求,输入一行81个数字,输出为填好后的81个数字(1~9)若无解,输出NO\r\n;【例2】:memcached客户端,若我们用memcached来保存用户最后的发帖时间,则每次响应用户发帖的请求时,程序要去设置一下memcached里的值,若这里用同步IO,则会增加延迟;【例1】:日志,在多线程服务器程序中,日志很重要,仅考虑log file;在一次请求响应中,可能要写多条日志信息,而若用。原创 2022-09-26 19:45:38 · 970 阅读 · 0 评论 -
【Linux多线程服务端编程】| 【02】线程同步精要
而调用threadFunc线程先调用Request::~Request(#6)在调用Inventory::remove(#5);主要解决读多写少的场景,当一个函数在读取时,我们对列表进行写入或删除操作可能会引起不必要的麻烦,所以在写入时,我们应该在拷贝一个副本在副本上进行操作;若在等待某个事件要发生,一般采用select等或条件或线程池、倒计时、队列,而不是使用sleep;最常用,保存临界区,任何时刻最多只能由一个线程在此mutex划出的临界区内活动;若需要等待某条件成立,则需要使用条件变量;原创 2022-09-25 09:46:58 · 461 阅读 · 0 评论 -
【Linux多线程服务端编程】| 【01】线程安全的对象生命期管理笔记
【死锁】:若L62中的update调用register_或unregister,若mutex_是不可重入,则会死锁;】:若销毁,则无法访问,无法获取对象状态,也可能在源地址上创建新的对象;【空悬指针】:当两个指针指向同一个对象,不同线程将其中一个对象销毁,而另外一个就成了空悬指针;解释:弱该对象还活着,即调用它的成员函数,否则忽略之,利用weak_ptr;【shared_ptr】:当对象最后一个时,进行析构或reset会被销毁;通过继承该基类,来确保上述的问题,即在bind中,传入的this还存活着;原创 2022-09-22 21:40:34 · 826 阅读 · 0 评论 -
Linux【网络库】| 【02 <netdb.h>】以及网络常用结构体
文章目录一、简介二、常用结构体1、addrinfo2、sockaddr_storage三、常用函数1、getaddrinfo2、gai_strerror3、freeaddrinfo4、getnameinfo案例stddefsys.unstdintbyteswap一、简介网络数据库操作的定义;二、常用结构体1、addrinfostruct addrinfo { int ai_flags; -原创 2022-03-24 15:59:25 · 3425 阅读 · 0 评论 -
Linux【网络库】| 【01 <ifaddr.h>】以及网络常用结构体
文章目录一、简介二、网络常用结构体1、ifaddrs2、sockaddr3、sockaddr_in4、sockaddr_in6三、常用函数1、getifaddrs2、freeifaddrs3、getnameinfo四、案例一、简介用来获取网络接口地址;二、网络常用结构体1、ifaddrsstruct ifaddrs { struct ifaddrs *ifa_next; // 指向列表中下一个结构的指针。该字段在列表的最后一个结构中为 NULL char原创 2022-03-24 15:06:51 · 1531 阅读 · 0 评论 -
Linux | Linux中的线程、互斥量、信号量的基本使用
前言文章目录前言一、概念1、什么是线程2、实现原理3、线程共享资源4、线程非共享资源5、线程优缺点二、线程常用方法一、概念类Unix系统中,早期是没有“线程”概念的,80年代才引入,借助进程机制实现出了线程的概念。因此在这类系统中,进程和线程关系密切。1、什么是线程线程(LWP)是操作系统能够进行运算调度的最小单位,是轻量级的进程,其本质仍是进程;线程是轻量级的进程,则线程与它的区别有哪些?与进程相比,线程没有独立的地址空间(共享);在Linux下,线程是最小的执行单位;进程是原创 2022-01-17 11:42:49 · 2238 阅读 · 0 评论 -
Linux | 进程组、守护进程
文章目录进程组概念进程组常用操作会话概念注意事项:getsid进程组概念进程组代表一个或多个进程的集合,每一个进程都属于一个进程组,简化对多个进程的管理;当父进程创建子进程时,默认子进程与父进程属于同一进程组;进程组的ID等于组长进程的ID;可通过kill signal -进程组号将整个进程组杀死;进程组的存亡与进程组长无关,只要有任何一个在,则就不会终止;进程组常用操作/** * getpgrp * ------- * param pid原创 2021-12-30 11:46:25 · 756 阅读 · 0 评论 -
Linux | 信号【02】
文章目录一、竞态条件1、pause函数一、竞态条件1、pause函数int pause(void);/** @func:导致调用进程(或线程)进入休眠状态,直到一个信号被传递,该信号要么终止了进程,要么导致调用信号捕获函数;* return:-1;*/...原创 2021-12-30 11:04:01 · 239 阅读 · 0 评论 -
Linux | Centos出现【fatal error: json/json.h: No such file or directory】
当在Centos系统下导入<json/json.h>时,出现以上问题,即可使用以下方法进行解决;sudo yum install cmakegit clone https://github.com/open-source-parsers/jsoncpp.gitcd jsoncppmkdir -p build/debugcd build/debugcmake -DCMAKE_BUILD_TYPE=debug -DJSONCPP_LIB_BUILD_SHARED=OFF -G "U..原创 2021-11-06 17:20:44 · 1694 阅读 · 0 评论 -
Linux | 解决ssh连接ip频繁变换,设置为静态ip
前言虚拟机使用ssh连接时,便于每次连接的ip不变,即将其设置成静态ip;文章目录前言????配置文件????查找HWADDR????查看IPADDR????修改成功后????配置文件# 切换到network-scripts目录下cd /etc/sysconfig/network-scripts# 在配置ifcfg-eno16777736文件,若没有则新建一个vim ifcfg-eno16777736配置文件内容DEVICE=eth1HWADDR=00:0C:29:90:原创 2021-11-06 14:58:36 · 1565 阅读 · 0 评论 -
Linux | 一文搞定Centos下安装mysql及神器mycli
前言文章目录前言一、下载mysql1、卸载原Linux中的mysql2、安装一、下载mysql1、卸载原Linux中的mysql# 查看Linux原来的Mysqlrpm -qa | grep -i mysql# 卸载原来的Mysqlrpm -e 文件名 --nodeps2、安装# 下载地址wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm# 使用rpm安装rpm -ivh mysql原创 2021-09-26 10:41:45 · 537 阅读 · 0 评论 -
Linux系统编程 | 【05】信号
前言信号在我们的生活中随处可见。如:古代战争中摔杯为号;现代战争中的信号弹;体育比赛中使用的信号枪等他们都有共性:简单;不能携带大量信息;满足某个特设条件才发送。信号是信息的载体。Linux/UNIX 环境下,古老、经典的通信方式,现下依然是主要的通信手段。Unix早期版本就提供了信号机制,但不可靠,信号可能丢失。Berkeley和AT&T都对信号模型做了更改,增加了可靠信号机制。但彼此不兼容。POSIX.1 对可靠信号例程进行了标准化。文章目录前言一、简介1、信号的机原创 2021-09-24 15:45:53 · 344 阅读 · 0 评论 -
Linux | 一文简单了解RPM、SRPM、Yum之间的区别及用法
前言 早期想要在Linux系统中安装软件是一件极其困难的事情。在那时候的程序大多仅提供源码。若想安装该程序,则需要程序员自行编译代码并解决该程序的软件依赖关系。这将非常考验程序员的耐心以及技能。并且在卸载该程序的时候也要注意相关的依赖库。为了便于用户更好的使用Linux,便出现了RPM、Yum、SRPM等来解决这个问题。????文章目录前言一、RPM1、简介2、常用命令二、Yum1、简介3、常用命令三、SRPM1、使用2、为何有RPM又有SRPM呢一、RPM1、简介(RedHat P原创 2021-09-23 21:50:10 · 496 阅读 · 0 评论 -
Linux密码忘记了咋么办?????别急一招教你搞定它
前言不少小伙伴在设置密码时,容易混杂,忘记密码登录不上;此时可以使用以下方法,不需要花大手脚对虚拟机进行重装。文章目录前言进入内核修改代码输入指令进入内核在Centos启动出现引导界面时,按下e即可进入到Linux系统的编辑内核中修改代码往下滑,会遇到Linux16开头的语句,在该行末尾添加\rd.break并按下Ctrl x执行即可跳转到紧急救援模式;输入指令随后即输入:mount -o remount,rw/sysrootchroot /sysroot输入新的密原创 2021-09-22 16:06:05 · 129 阅读 · 0 评论 -
Vim | vimrc配置文件
使用前需要先配置好YCM,且Vim版本最好再8.1以上。配置Vim查看这篇文章即可。配置.vimrc:vim ~/.vimrc再将这些复制上去保存;在使用vim进入到该文件输入PluginInstall等待安装完毕即可。set t_Co=256 let g:solarized_termcolors=256 set background=dark colorscheme molokaiset number "左侧行号set smartindent "智能对齐set shi.原创 2021-09-19 09:15:37 · 475 阅读 · 0 评论 -
Linux | GCC配置以及Vim配置整体流程无误(踩过的坑已修改)
文章目录WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!VIM安装安装python38环境安装依赖下载vim下载bundle安装YumCompleteMe安装GCC安装bison安装texinfo安装autoconf安装automake安装gcc使用说明makeconfigureWARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!找到 C:\Users\xx\.ssh\known_hosts;在.ssh文件原创 2021-09-18 08:42:12 · 894 阅读 · 0 评论 -
为什么Linux重装后ssh不能用【WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!】
遇到该问题只需找到 C:\Users\xx\.ssh\known_hosts;在.ssh文件夹下打开cmd:使用ssh-keygen -R 你的ip即可;✌原创 2021-09-17 13:53:26 · 158 阅读 · 0 评论 -
编译YouCompleteMe的问题:File .vim/*/YouCompleteMe/third_party/ycmd/build.py does not exist
在Linux配置Vim时常遇到的问题:若使用git clone https://github.com/Valloric/YouCompleteMe.git克隆后在进行git submodule update --init --recursive基本上都不能成功;若使用git clone https://github.com/ycm-core/YouCompleteMe.git即可,后续git submodule update --init --recursive的过程中可能会中断,但继续重新执.原创 2021-09-17 13:51:25 · 713 阅读 · 0 评论 -
Linux系统编程 | 【03】进程、环境变量、IPC
文章目录一、进程相关概念1、程序和进程2、并发3、单道程序设计4、多道程序设计5、CPU和MMU一、进程相关概念1、程序和进程程序:编译好的二进制文件;进程:抽象概念,活跃的程序,占用资源,在内存中执行;同一程序可加载为不同的进程;2、并发一个时间段中有多个进程都处于启动到结束之间的状态,在任一时刻都只有一个进程在运行。3、单道程序设计一次只能运行一个程序;4、多道程序设计同时存放几道相互独立的程序;首先必须要有支持该硬件的基础;时钟中断是其基础:强制让进程让出原创 2021-09-15 20:50:48 · 2023 阅读 · 1 评论 -
Linux系统编程 | 【02】文件I/O操作常用函数介绍
文章目录一、文件IO1.1 open、close一、文件IO1.1 open、close#include<fcntl.h>int open(const char *pathname, int flags);int open(const char *pathname, int flags, mode_t mode);int close(int fd);/* open---------* @param flags: O_RDONLY, O_WRONLY,O_RDWR【O_AP原创 2021-09-09 09:14:27 · 781 阅读 · 0 评论 -
Linux系统编程 | 【01】Linux入门
文章目录一、shell1.1 相关操作1.2 快捷键盘二、目录和文件2.1 目录介绍2.2 文件路径2.3 文件类型【查看文件的第一个字符】2.4 ls2.5 which2.6 pwd2.7 rm2.8 touch2.9 mv2.10 cp2.11 cat2.12 more2.13 tree2.14 du2.15 df2.16 ln三、文件属性和用户用户组3.1 whoami3.2 chmod3.3 chown3.4 修改用户组四、查找与检索4.1 find4.2 exec4.3 ok4.4 grep五、软原创 2021-09-06 09:06:01 · 283 阅读 · 0 评论 -
简单了解 Makefile
文章目录一、规则1.1 make工作方式1.2 通配符1.3 VPATH二、伪目标1.1 无依赖条件三、引用四、命令输出五、函数一、规则文件名只能为makefile或Makefile若该项目没有编译过,则所有c文件都要编译并链接;若项目中某c文件被修改,则只需编译被修改的c文件,并链接目标程序;若头文件修改,则需要编译引用了该头文件所对应的c文件,并链接目标程序;make会比较targets文件和prerequisites文件的修改日期,若依赖条件中有任一文件比目标新,则该命令就会被执行;原创 2021-09-06 08:39:07 · 229 阅读 · 0 评论 -
服务器开发基础 | 【01】基本介绍
文章目录1、设计目标2、大并发服务器介绍2.1 大量请求解决方法2.2 降低数据库的压力2.3 服务器性能杀手3、架构演变3.1 web server与数据库分离3.2 缓存处理3.3 web server集群和读写分离3.4 CSN、分布式缓存、分库分表3.5 多数据中心 + 分布式存储与计算1、设计目标高性能:大量并发请求能快速做出响应;高可用:能保证7x24小时不间断服务,能够进行故障转移;伸缩性:能够进行灵活部署。2、大并发服务器介绍任何网络都可抽象为C/S结构;2.1原创 2021-08-31 15:26:10 · 324 阅读 · 0 评论