自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 资源 (1)
  • 收藏
  • 关注

转载 C/C++编程:服务器通信需要解决的问题

注:这里只针对单服务器框架先来理解两个概念:所谓高性能就是服务器能流畅的处理各个客户端的连接并尽量低延迟的应答客户端的请求所谓高并发

2021-09-30 17:34:10 282

转载 leetcode:219. 存在重复元素 II

题目来源leetcode题目描述题目解析哈希表从左到右遍历数组nums,当遍历到下标iii时,如果存在下标j<ij < ij<i使得nums[i]==nums[j]nums[i] == nums[j]nums[i]==nums[j],则当i−j<=ki - j <= ki−j<=k时即找到了两个符号要求的下标j和i。如果在下标iii之前存在多个元素都和nums[i]nums[i]nums[i]相等,为了判断是否存在满足nums[i]==nums[j]nums

2021-09-30 17:24:56 250

转载 Unix/Linux编程:使用epoll时需要将socket设为非阻塞吗?

结论提出这个问题说明对网络编程的一些基本原理未搞明白,先说下结论:一个socket是否设置为阻塞模式,只会影响到connect/accept/send/recv四个socket API函数,不会影响到select/poll/epoll_wait函数,后三个函数的超时或者阻塞时间是由其函数自身参数控制的原理分析下面详细的解释,为了方便解释,在这之前我们先明确几个基础概念:connfd:创建socket,主动发起连接的一端(客户端),该端调用connect函数主动发起连接listenfd:创建

2021-09-30 15:19:28 754

转载 网络:没有accept(),能建立TCP连接吗

上面这个动图,是我们平时客户端和服务端建立连接时的代码流程。对应的是下面一段简化过的服务端伪代码。int main(){ /*Step 1: 创建服务器端监听socket描述符listen_fd*/ listen_fd = socket(AF_INET, SOCK_STREAM, 0); /*Step 2: bind绑定服务器端的IP和端口,所有客户端都向这个IP和端口发送和请求数据*/ bind(listen_fd, xxx); /*St.

2021-09-30 14:17:56 603 3

转载 redis面试:缓存雪崩、缓存击穿、缓存穿透

无处不在的缓存缓存在计算机系统是无处不在,在CPU层面有L1-L3的Cache,在Linux中有TLB加速虚拟地址和物理地址的转换,在浏览器有本地缓存、手机有本地缓存等。可见,缓存在计算机系统中有非常重要的地位,其主要作用是提高响应速度、减少磁盘访问等,本文主要讨论在高并发系统中的缓存系统。一句话概括缓存系统在高并发系统中的地位的话:如果高并发系统是烤羊肉串,那么缓存系统就是那一撮孜然。高并发系统中的缓存缓存系统的作用缓存系统在高并发系统的作用很大,在某种程序上可以说没有缓存系统很难支撑高并发

2021-09-30 11:57:11 419

转载 C/C++编码:无锁编程

什么是无锁编程无锁编程,即不使用锁的情况下实现多线程之间的变量同步,也就是在没有线程被阻塞的情况下实现变量的同步,所以也叫非阻塞同步(Non-blocking Synchronization)实现非阻塞同步的方案称为“无锁编程算法”为什么要非阻塞同步使用lock实现线程同步有非常多缺点:产生竞争时,线程被阻塞等待,无法做到线程实时响应dead locklive lock优先级反转使用不当,造成性能下降假设在不使用 lock 的情况下,实现变量同步,那就会避免非常多问题。尽管眼下来

2021-09-30 10:03:36 1204

转载 C/C++编程:高性能开发有哪些常用的技术?

准备老板告诉你,开发一个静态web服务器,把磁盘文件(网页、图片)通过网络发出去,怎么做?你花了两天时间,做了一个1.0版本:主线程进入一个循环,等待连接来一个连接就启动一个工作线程来处理工作线程中,等待对方请求,然后从磁盘读文件,往套接口发数据。over上线一天,老板发现太慢了,大一点的图片加载都有卡顿感。让你优化,这个时候,你需要:IO优化:零拷贝技术上面的工作线程,从磁盘读文件,再通过网络发送数据,数据从磁盘到网络,一共需要拷贝四次,其中CPU亲自搬运都需要两次零拷贝技.

2021-09-30 09:47:34 2916 1

转载 C/C++编程:协程库NtyCo入门

协程的起源问题:协程存在的原因?协程能够解决哪些问题在我们线程CS/BS开发模式下,服务器的吞吐量是一个很重要的参数。其实吞吐量是IO处理时间加上业务处理。为了简单起见,比如,客户端与服务器之间是长连接的,客户端定期给服务器发送心跳包数据。客户端发送一次心跳包到服务器,服务器更新该新客户端状态的。心跳包发送的过程,业务处理时长等于IO读取(RECV系统调用)加上业务处理(更新客户状态)。吞吐量等于1s业务处理次数。业务处理(更新客户端状态)时间,业务不一样的,处理时间不一样,我们就不做讨论。

2021-09-29 11:30:19 969

转载 RFC:我的一些关于RFC的问题

RFC是什么?一句话概括就是意见征求稿(Request for Comments),涵盖了互联网上的各种标准,包括搞笑的协议。有必要读吗?论点一个人认为没有太大必要,毕竟市面上有很多教科书帮你把知识都涵盖了。所以除非你要深究,或者了解一下背景,结合书本看还是挺有意思的。论点二阅读源码是开源软件的重要组成部分。这意味着用户可以查看代码并了解做了什么。但“阅读源码”并不仅适用于代码。理解代码实现的标准同样重要。这些标准编写在由 互联网工程任务组(Internet Engineering T

2021-09-29 10:09:18 248

转载 memcache:liunx memcache安装

Memcached 支持许多平台:Linux、FreeBSD、Solaris、Mac OS,也可以安装在Windows上。安装Linux系统安装memcached,首先要先安装libevent库。sudo apt-get install libevent ibevent-dev 自动下载安装(Ubuntu/Debian)yum install libevent libevent-devel #自动下载安装(Redhat/Fedora/Ce

2021-09-29 09:47:24 91

转载 C/C++编程:nginx服务器模型

nginx在启动后,会有一个master进程和多个worker(工作)进程master进程主要用来管理worker进程,包含接收来自外界的信号向各worker进程发送信号监控worker进程的运行状态,当worker进程异常退出后,会自动重新启动新的worker线程也就是说,master进程充当整个进程组与用户的交互接口,同时对进程进行监护。它不需要处理网络事件,不负责业务的执行,只会通过管理worker进程来实现重启服务,平滑升级、更换日志文件、配置文件实时生效等功能。我们要控制ngi

2021-09-28 17:52:08 757

转载 C/C++编程:通过源码编译的方式安装nginx

准备工作Linux操作系统首先我们需要一个内核为Linux 2.6及以上版本的操作系统,因为Linux 2.6及以上内核才支持epoll,而在Linux上使用select或poll来解决事件的多路复用,是无法解决高并发压力问题的。$ uname -aLinux localhost.localdomain 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux内核版本是3.10.

2021-09-28 15:06:59 648

转载 Unix/Linux编程:深度理解select、poll和epoll

在linux 没有实现epoll事件驱动机制之前,我们一般选择用select或者poll等IO多路复用的方法来实现并发服务程序。在大数据、高并发、集群等一些名词唱得火热之年代,select和poll的用武之地越来越有限,风头已经被epoll占尽。本文便来介绍epoll的实现机制,并附带讲解一下select和poll。通过对比其不同的实现机制,真正理解为何epoll能实现高并发。select()和poll() IO多路复用模型select的缺点单个进程能够监视的文件描述符的数量存在最大限制,通常是1

2021-09-28 14:42:09 1518 1

转载 C/C++编程:怎样理解阻塞非阻塞与同步异步的区别?

用户空间和内核空间操作系统为了支持多个应用同时进行,需要保证在不同进程之间相对独立(一个进程的崩溃不会影响其他的进程,恶意进程不能直接读取和修改其他进程运行时的代码和数据),因此操作系统内核需要拥有高于普通进程的权限,以此来调度和管理用户的应用程序于是内存空间被划分为两部分,一部分为内核空间,一部分为用户空间,内核空间存储的代码和数据具有更高级别的权限。内存访问的相关硬件在程序执行期间会进行访问控制( Access Control),使得用户空间的程序不能直接读写内核空间的内存。进程切换上图展示了

2021-09-28 13:52:12 1115

转载 C/C++编程:nginx入门

是什么nginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。Nginx专为性能优化而开发,性能是器最重要的考量,实现上非常注重效率,能经受高负载的考验,据报告能支持高达50,000个并发连接数。Nginx不仅能做反向代理,实现负载均衡;还能可以作正向代理来进行上网等功能。特点高并发,高

2021-09-28 12:00:04 2803

转载 C/C++编程:web服务器的进程模型

作为Web服务器,设计的初衷就是为了能够处理更多的客户端的请求,一般来说,完成冰箱处理请求工作有三种方式可以选择:多进程、多线程、异步方式多进程方式服务器每接收到一个客户端请求,就会由主进程生成一个子进程出来和该请求建立连接进行交互,直到连接断开以后子进程也就结束了。有点在于各个子进程之间相互独立,各个客户端请求之间相互不受干扰。缺点在于生成一个子进程需要进行内存复制,在资源和时间上会产生一定的额外开销。如果请求比较多的时候,会对系统资源造成一定的压力。...

2021-09-28 11:59:10 173

转载 网络:反向代理和负载均衡有何区别?

反向代理与负载均衡的区别做了反向代理才能实现负载均衡。负载均衡是做反向代理的目的之一。引入刚开始时,网站会是以单个节点作为后端Server的C/S架构。对于请求量非常少的服务,这样的部署不会有什么问题,但如果这个服务请求量上来的时候,这样部署的架构就很有问题了。首先一个很客观的问题就是,如果单从服务器的物理特性来看,这个服务器就不能支持这么高的请求量。这种情况下,就迫使开发者去把服务迁移到一个CPU更强、内存更高,综合性能更好的服务器。通过更换服务器当然可以解决这个问题,在不考虑成本的条件下.

2021-09-28 11:44:30 2152

转载 memcache:入门

是什么memcache是一个自由、源码开放、高性能、分布式的分布式内存对象缓存系统,用于动态Web应用以减轻数据库的负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高了网站访问的速度。memcache是一种基于内存的key-value存储,用来存储小块的任意数据(字符串、对象)。这些数据可以是数据库调用、API调用或者是页面渲染的结果。memcache简洁而强大。它的简洁设计便于快速开发,减轻开发难度,解决了大数据量缓存的很多问题。它的API兼容大部分流行的开发语言。许多语言都实

2021-09-28 10:30:00 85

转载 C/C++编程:通过unix域套接字在进程之间传递文件描述符

不同进程的文件描述符传递技术简介在多进程的程序中经常需要在不同的进程之间传递文件描述符,但是不同的进程之间文件描述符表示的不同的对象,如果在不同的进程中使用相同的文件描述符,而代表相同的对象呢?一般情况下,父子进程或者exec的紫禁城可以共享同一文件表项。即通过open等函数返回的文件描述符可以在父子进程间使用。如下图:但是,不同的进程(没有进程关系),各自通过open函数返回的文件描述符是不可以共同使用的,即不同的进程打开不同的文件表项,然后再同时指向同一文件。在技术上,我们将指向一个

2021-09-26 18:02:54 772

转载 C/C++编程:如何优雅的处理 Accept 出现 Emfile 的问题

通常情况下,服务端调用 accept 函数会返回一个新的文件描述符,用于和客户端之间的数据传输在服务器的开发中,有时会遇到这种情况:当调用 accept 函数接受客户端连接,函数返回失败,对应的错误码是 EMFILE, 它表示当前进程打开的文件描述符已达上限,此时,服务器不能再接受客户端连接当遇到上述问题,怎么合理的处理呢,下面就来分析一下建立连接的流程先简单回顾下客户端和服务器建立连接的流程,具体的如下图所示:客户端发起SYNC请求服务器收到客户端的SYN请求后,内核把连接放入..

2021-09-26 15:23:42 565 2

转载 C/C++编程:isatty

函数名:isatty头文件:<io.h>函数原型: int isatty(int handle);功能: 检查给定的设备类型参数:int handle 为要检查的设备文件句柄返回值: 普通文件 返回0 ,设备 返回-1补充:常用设备名:stdin 标准输入设备 键盘stdout 标准输出设备 显示器stderr 标准错误设备stdaux 辅助设备stdprn 打印机实例使用该函数判断设备和普通文件,并输出提示#include<std

2021-09-24 15:36:40 770

转载 Unix/Linux编程:Netlink机制

什么是Netlink通信机制Netlink是linux提供的用于内核和用户态进程之间的通信方式。但是注意虽然Netlink主要用于用户空间和内核空间的通信,但是也能用于用户空间的两个进程通信。只是进程间通信有其他很多方式,一般不用Netlink。除非需要用到Netlink的广播特性时。NetLink机制是一种特殊的socket,它是Linux特有的,由于传送的消息是暂存在socket接收缓存中,并不为接受者立即处理,所以netlink是一种异步通信机制。系统调用和ioctl是同步通信机制.

2021-09-24 11:19:32 3619

转载 Unix/Linux编程:既然有了HTTP请求,为什么还要RPC调用

回答首先HTTP和RPC并不是一个并行概念rpc是远程过程调用,其调用协议通常包含传输协议和序列化协议。传输协议包含: 如著名的 [gRPC](grpc / grpc.io) 使用的 http2 协议,也有如dubbo一类的自定义报文的tcp协议。序列化协议包含: 如基于文本编码的 xml json,也有二进制编码的 protobuf hessian等。因此我理解的你想问的问题应该是:为什么要使用自定义 tcp 协议的 rpc 做后端进程通信?要解决这个问题就应该搞清楚http使用的tcp协议和

2021-09-22 20:49:25 285

转载 python:值传递与引用传参

接下来主程序开始调用 swap() 函数,在调用 swap() 函数时,dw 变量作为参数传入 swap() 函数,这里依然采用值传递方式:把主程序中 dw 变量的值赋给 swap() 函数的 dw 形参,从而完成 swap() 函数的 dw 参数的初始化。值得指出的是,主程序中的 dw 是一个引用变量(也就是一个指针),它保存了字典对象的地址值,当把 dw 的值赋给 swap() 函数的 dw 参数后,就是让 swap() 函数的 dw 参数也保存这个地址值,即也会引用到同一个字典对象。

2021-09-22 11:27:20 1649

转载 Unix/Linux编程:服务器模型Reactor和Proactor

网络IO,会涉及到两个系统对象,一个是用户空间调用IO的进程或者线程,另一个是内核空间的内核系统,比如发生IO操作read时,它会经历两个阶段等待数据准备就绪将数据从内核拷贝到进行或者线程中因为在以上两个阶段各有不同的情况,所以出现了多种网络IO模型服务器模型Reactor和Proactor对高并发编程,网络连接上的消息处理,可以分为两个阶段:等待消息准备好消息处理当使用默认的阻塞套接字时(例如上面提到的 1 个线程捆绑处理 1 个连接),往往是把这两个阶段合二为一,这样操作套接字的

2021-09-22 10:29:31 608

转载 网络:分布式和网络的区别

单机结构我想大家最最最熟悉的就是单机结构,一个系统业务量很小的时候所有的代码都放在一个项目中就好了,然后这个项目部署在一台服务器上就好了。整个项目所有的服务都由这台服务器提供。这就是单机结构。那么,单机结构有啥缺点呢?我想缺点是显而易见的,单机的处理能力毕竟是有限的,当你的业务增长到一定程度的时候,单机的硬件资源将无法满足你的业务需求。此时便出现了集群模式,往下接着看。集群结构集群模式在程序猿界有各种装逼解释,有的让你根本无法理解,其实就是一个很简单的玩意儿,且听我一一道来。单机处理到达瓶颈.

2021-09-17 15:42:05 329

转载 C/C++编程:浅谈reverse_iterator的base()函数

APIstd::reverse_iterator<Iter>::base从其 reverse_iterator还原基础迭代器。iterator_type base() const; (until C++17)constexpr iterator_type base() const; (since C++17) 与其基础迭代器处理所有反向迭代器的标识是: &*(rit

2021-09-17 15:01:38 1979

转载 beanstalk:分布式内存队列系统

官网githubbeanstalk是一个高性能、轻量级、分布式的、内存型的消息队列系统。最初设计的目的是想通过后台异步执行耗时的任务来降低高容量web应用系统的页面访问延迟。其中Beacstalked是典型的类Memcached设计,协议和使用方式都是同样的风格。其基本设计思想很简单:高性能离不开异步,异步离不开队列,而内部都是生产者-消费者模式的背景现在市面上有很多消息队列系统了。常见的有ActiveMQ, RabbitMQ,ZeroMA,Kafka,RocketMQ等其中ActiveM.

2021-09-17 09:47:38 239

转载 Mysql:autocommit

autocommit背景知识:mysql事务支持的引擎是InnoDB默认情况下autocommit的值为11.首先准备一张innodb引擎的测试表:CREATE TABLE `test` ( `id` int(11) NOT NULL) ENGINE=InnoDB;INSERT INTO `test` VALUES ('1');INSERT INTO `test` VALUES ('3');INSERT INTO `test` VALUES ('5');2.执行如下命令可以发现

2021-09-10 09:10:28 662

转载 Unix/Linux编程:dlopen API函数

动态加载库当一个可执行文件开始运行之后,动态链接器会加载程序的动态依赖列表中的所有共享库,但有些时候延迟加载库是比较有用的,如只在需要的时候再加载一个插件。动态链接器的这项功能是通过dlopen API来实现的。dlopen API使得程序能够在运行时打开一个共享库,根据名字在库中搜索一个函数。然后调用这个函数。dlopen API由下列函数组成:dlopen()函数打开一个共享库,返回一个供后继使用的句柄dlsys()函数在库中搜索一个符号(一个包含函数或者变量的字符串)并返回其地址dlcl

2021-09-09 17:22:40 755

转载 C/C++编程:pthread_once

函数声明int pthread_once(pthread_once_t *once_control, void (*init_routine) (void));本函数使用初值为PTHREAD_ONCE_INIT的once_control变量保证init_routine()函数在本进程执行序列中仅执行一次。使用示例#include <semaphore.h>#include <sys/types.h>#include <dirent.h>#include &

2021-09-09 16:47:46 453

转载 cmake:获取GUN编译器的版本

GNU编译器(GCC)为编译器所生产系统GNU项目支持各种编程语言。GCC是GNU工具链的关键组件,也是大多数与GNU和Linux有关的项目(包括Linux内核)的标准编译器。在自由软件基金会(FSF)的分配下GCC GNU通用公共许可证(GNU GPL)。作为工具和示例,GCC在自由软件的增长中发挥了重要作用。实践 if (CMAKE_COMPILER_IS_GNUCC) execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpfull.

2021-09-08 15:02:26 3870

原创 cmake:CMAKE_CURRENT_SOURCE_DIR与CMAKE_SOURCE_DIR

CMAKE_CURRENT_SOURCE_DIR:当前CMakeLists.txt所在目录CMAKE_SOURCE_DIR: 最外层CMakeLists.txt所在目录最外层CMakeLists.txtcmake_minimum_required(VERSION 3.16)project(matser)set(CMAKE_CXX_STANDARD 14)message("matser_CMAKE_BINARY_DIR: " ${CMAKE_BINARY_DIR} )mess..

2021-09-08 13:34:16 20028

转载 Unix/Linux编程:设置套接字为阻塞或者非阻塞模式

/** * 设置套接口为阻塞或非阻塞 * @param fd {ACL_SOCKET} SOCKET 套接字 * @param on {int} 是否设置该套接字为非阻塞, ACL_BLOCKING 或 ACL_NON_BLOCKING * @return {int} >= 0: 成功, 返回值 > 0 表示设置之前的标志位; -1: 失败 */ int acl_non_blocking(ACL_SOCKET fd, int on){ ...

2021-09-07 14:46:34 1147

onvif摄像头对接鉴权

对应文章: https://blog.csdn.net/zhizhengguan/article/details/109325688

2022-08-11

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除