- 博客(43)
- 资源 (2)
- 收藏
- 关注
转载 链路mtu
常常见到交换机和网卡说明中提到支持Jumbo Frame,但我一直对以太网的Jumbo Frame(巨帧)如何使用不太理解,今日在网上找到2则现摘录下来,相信看了以后大家会有收获。 ---- 这是一种厂商标准的超长帧格式,专门为千兆以太网而设计,目前还没有获得IEEE标准委员会的认可。以太网标准的最大帧长度为1518字节,而Jumbo Frame的长度各厂商有所不同,从9000字节~64000字节不等。采用Jumbo Frame能够令千兆以太网性能充分发挥,使数据传输效率提高50%~100%。在网络存储的应
2021-09-17 14:55:40 764
转载 iptables原理和防火墙主要命令使用场景
https://www.zsythink.net/archives/1764朱双印的个人日志,写的非常的通俗易懂,好文章。https://blog.csdn.net/u011277123/article/details/82854794
2021-04-17 11:04:43 173
转载 mktime函数性能分析
mktime函数性能分析1月 02, 2019inLinux环境高级编程mktime函数性能分析mktime是一个将break-down时间(struct tm)转化为日历时间(time_t)的转换函数。它的转换与struct tm中的 tm_wday、tm_yday无关,当进行转换时,mktime会通过struct tm的其他成员重新矫正该值。若struct tm中的成员是非法的的,mktime将会自动校正,如2018-12-32 00:00:00,矫正后为2019-01-01 00:0..
2021-04-08 13:49:00 3208
转载 Nginx 多进程连接请求/事件分发流程分析
Nginx 多进程连接请求/事件分发流程分析 https://www.cnblogs.com/NerdWill/p/4992345.htmlNginx使用多进程的方法进行任务处理,每个worker进程只有一个线程,单线程循环处理全部监听的事件。本文重点分析一下多进程间的负载均衡问题以及Nginx多进程事件处理流程,方便大家自己写程序的时候借鉴。一、监听建立流程整个建立监听socket到accept的过程如下图:说明:1.main里面调用ngx_init_cycle(s..
2021-03-02 23:48:09 285
转载 Http协议面试题小结
1.说一下什么是Http协议对器客户端和 服务器端之间数据传输的格式规范,格式简称为“超文本传输协议”。2.什么是Http协议无状态协议?怎么解决Http协议无状态协议?(1)、无状态协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息 (2)、无状态协议解决办法: 通过1、Cookie 2、通过Session会话保存。3.说一下Http协议中302状态http协议中,返回状态码302表示重定向。 这种情况下,服务器返回的头部信息中...
2021-03-01 23:52:19 190
转载 HTTP无状态协议以及其解决方案
一、无状态的理解1、协议对事物处理没有记忆能力2、对同一个url请求没有上下文关系3、每次的请求都是独立的,它的执行情况和结果与前面的请求和之后的请求无直接关系,它不会受前面的请求应答情况影响,也不会影响之后的请求应答情况4、服务器中没有保存客户端的状态,客户端每次需带上自己的状态去请求服务器二、通俗理解 标准的http协议指的是不包括cookies,session,application的http协议 无状态是指没有对本次客户端在和服务器会话设置一个缓存区,用来记录这次会话的状态和产生
2021-03-01 23:46:39 1229
原创 nginx高性能原因
Nginx 是如何实现高性能高并发:1 异步非阻塞:epoll设置了超时,通过epoll监控的所有socket文件描述符也都设置为非阻塞、ET边缘触发模式(ET模式在大多数情况,ET因为出发系统调用的次数比LT少,效率比LT要高),有请求或者超时epoll_wait函数都会返回,然后去处理网络请求(每进来一个request,会有一个worker进程去处理。但不是全程的处理,处理到什么程度呢?处理到可能发生阻塞的地方,比如静态大文件分块响应、向上游(后端)服务器转发request、http状态机阻塞处
2021-03-01 00:21:37 763
转载 Linux下的I/O复用与epoll详解(ET与LT)
前言 I/O多路复用有很多种实现。在linux上,2.4内核前主要是select和poll,自Linux 2.6内核正式引入epoll以来,epoll已经成为了目前实现高性能网络服务器的必备技术。尽管他们的使用方法不尽相同,但是本质上却没有什么区别。本文将重点探讨将放在EPOLL的实现与使用详解。为什么会是EPOLLselect的缺陷 高并发的核心解决方案是1个线程处理所有连接的“等待消息准备好”,这一点上epoll和select是无争议的。但select预估错误了一件事...
2021-02-28 22:44:00 277
转载 堆状态分析的利器——gperftools的Heap Profiler
在《内存泄漏分析的利器——gperftools的Heap Checker》一文中,我们介绍了如何使用gperftools分析内存泄漏。本文将介绍其另一个强大的工具——Heap Profiler去分析堆的变化过程。(转载请指明出于breaksoftware的csdn博客) 我们使用类似于《堆状态分析的利器——valgraind的DHAT》中的测试代码作为例子。为了让Heap Profiler产生多份快照文件,我将申请的内存放大了很多 #include &...
2021-02-25 16:31:09 897
转载 TCP socket拔网线判断
有些网络应用在网线断开后重新连上的情况下tcp socket连接保持ESTABLISH状态不变,假如应用程式不使用tcp的keepalive,在网线断开之后,以前建立的 socket 链接仍然会保持在ESTABLISH 状态不会改变。实际上tcp协议对这部分是有所处理的,需要服务端程式,在配置socket属性时,使用 keepalive option,一旦有此配置,这些长时间无数据的链接会根据tcp的keepalive内核属性,在大于(tcp_keepalive_time(tcp_keepalive_pr.
2021-02-24 23:20:32 2885 1
转载 2021-02-15
1.fork()函数:创建新进程头文件:#include <unistd.h> #include<sys/types.h>函数原型:pid_t fork(void);返回值:一个是子进程返回0,第二个是父进程的返回值大于0,错误返回-1功能:创建一个新的进程。(pid_t 是一个宏定义,其实质是int 被定义在#include<sys/types.h>中)来看一下fork之后,发生了什么事情。由fork创...
2021-02-15 21:39:43 99
转载 https原理、对称加密、非对称加密、数字证书、数字签名
一、为什么要使用https使用https的原因其实很简单,就是因为http的不安全。当我们往服务器发送比较隐私的数据(比如说你的银行卡,身份证)时,如果使用http进行通信。那么安全性将得不到保障。首先数据在传输的过程中,数据可能被中间人抓包拿到,那么数据就会被中间人窃取。其次数据被中间人拿到后,中间人可能对数据进行修改或者替换,然后发往服务器。最后服务器收到数据后,也无法确定数据有没有被修改或替换,当然,如果服务器也无法判断数据就真的是来源于客户端。总结下来,http存在三个弊端:无法保证
2021-02-04 00:27:05 527
转载 非对称加解密
一、加密算法种类1密钥密钥,一般就是一个字符串或数字,在加密或者解密时传递给加密或解密算法,以使算法能够正确对明文加密或者对密文解密。2加密算法分类这世上存在两种加密算法:对称加密(symmetric cryptography)和非对称加密(asymmetric cryptography)。也就是说,你想进行加解密操作的时候需要具备两样东西:秘钥和加解密算法。2.1、对称加密对称加密算法的特点是加密使用的密钥和解密使用的密钥是相同的。也就是说,加密和解密都是使用的同一个密钥。因此对称加密算法
2021-02-02 23:04:56 1442
转载 tcp发送窗口(滑动窗口)、拥塞窗口
TCP发送窗口拥塞窗口试题分析题目一:来源2015年408计算机综合试题链接:https://www.nowcoder.com/questionTerminal/3241441c88f04ab58585a187716055d3主机甲和主机乙新建一个TCP 连接,甲的拥塞控制初始阈值为 32KB,甲向乙始终以 MSS=1KB 大小的段发送数据,并一直有数据发送;乙为该连接分配 16KB 接收缓存,并对每个数据段进行确认, 忽略段传输延迟。若乙收到的数据全部存入缓存,不被取走,则甲从连接建立.
2021-01-24 21:27:16 3340
转载 http-parser用法
头文件说明:解析类型定义:enum http_parser_type { HTTP_REQUEST, HTTP_RESPONSE, HTTP_BOTH };解析函数声明:void http_parser_init(http_parser *parser, enum http_parser_type type);void http_parser_settings_init(http_parser_settings *settings);size_t http_parser_execute(ht
2020-12-10 20:27:22 2436
转载 Nginx 源码分析:ngx_queue_t
Nginx 源码分析:ngx_queue_t源文件路径src\core\Ngx_queue.hsrc\core\Ngx_queue.c主要作用分析ngx_queue_t是Nginx提供的双向链表。通常意义上的双向链表是长成这个样子的:struct double_link_s { int node; double_link_t *prev; double_link_t *next;};包含三个要素:节点数据data,指向前一
2020-11-15 20:19:13 146
转载 ngx_queue
Nginx 源码分析第三篇之 ngx_queue 队列ngx_queue 队列ngx_queue_t是一个双向链表,实现了一个队列的操作逻辑。但是它的结构只行指针的操作,因而在定义自己的节点时,需要自己定义数据结构和分配空间,并包含一个ngx_queue_t类型的成员。typedef struct ngx_queue_s ngx_queue_t;struct ngx_queue_s { ngx_queue_t *prev; ngx_queue_t *next;};
2020-11-15 18:02:26 149
转载 Nginx源码剖析--event类型模块
Nginx源码剖析--event类型模块目录 目录 前言 核心模块 几种event模块 ngx_event_core_module epoll和kqueue等功能性的event模块 嵌入到Nginx框架中 总结 前言前面梗概介绍了Nginx模块配置的信息。简单地说,nginx的灵活性主要归功于他的高度模块化和可配置性。其中可配置性依赖于配置文件。在nginx中,模块就是一个struct类型的全局变量。Ngi...
2020-11-14 22:33:23 193
转载 Linux 惊群效应之 Nginx 解决方案
Linux 惊群效应之 Nginx 解决方案前言因为项目涉及到 Nginx 一些公共模块的使用,而且也想对惊群效应有个深入的了解,在整理了网上资料以及实践后,记录成文章以便大家复习巩固。结论不管还是多进程还是多线程,都存在惊群效应,本篇文章使用多进程分析。 在 Linux2.6 版本之后,已经解决了系统调用 accept 的惊群效应(前提是没有使用 select、poll、epoll 等事件机制)。 目前 Linux 已经部分解决了 epoll 的惊群效应(epoll 在 fork 之前
2020-11-14 22:30:02 178
原创 json原理和应用
没有实际项目,上课讲的不透彻,json应用场景讲了,但是具体没讲到点子上,等云盘项目的例子在看吧!cjson rapijson用来解析json,序列化反序列化,生成对应语言的代码供开发者调用。json、xml序列化反序列化方案:具体实例...
2020-10-23 00:26:02 1456
转载 google protobuf 定义服务(service)
l 定义服务(Service) 如果想要将消息类型用在RPC(远程方法调用)系统中,可以在.proto文件中定义一个RPC服务接口,protocol buffer编译器将会根据所选择的不同语言生成服务接口代码及存根。如,想要定义一个RPC服务并具有一个方法,该方法能够接收 SearchRequest并返回一个SearchResponse,此时可以在.proto文件中进行如下定义: s...
2020-10-21 22:16:34 2268
原创 protobuf特性剖析
一:该要点,基本语法+类型+压缩(varint +负数问题+字段名压缩算法)+packed二:实际项目使用(复杂结构体定义);三:pb优点(扩展性、兼容性、)。参考:https://cloud.tencent.com/developer/article/1394349...
2020-10-21 01:27:01 337
转载 protobuf any 的操作c++
https://blog.csdn.net/u012662731/article/details/88077828person.protosyntax = "proto3"; import "google/protobuf/any.proto";message Apply_data{ uint32 apply_data_id = 1; uint64 apply_time = 2;}message Apply_list{ uint32 a
2020-10-20 18:16:52 1403
转载 Linux进程同步之POSIX信号量
POSIX信号量是属于POSIX标准系统接口定义的实时扩展部分。在SUS(Single UNIX Specification)单一规范中,定义的XSI IPC中也同样定义了人们通常称为System V信号量的系统接口。信号量作为进程间同步的工具是很常用的一种同步IPC类型。 在《UNIX网络编程 卷2:进程间通信》的前言第二页与第1版的区别中作者提到“PO...
2020-10-17 23:03:45 305
原创 system v信号量实现进程间共享内存同步机制---环形队列缓冲区
共享内存:上一篇文章已经介绍过shm共享内存和system v信号量机制,这里就不在重复介绍了。应用场景:进程间通讯方式有很多,其中最快的应该就是共享内存了,因为直接通过物理内存共享的方式进行通讯,所以速度是其他网络方式不可比的。但是没有一种同步机制管理这块内存的话,应用场景会很有限。下面我们就通过system v信号量的方式给共享内存加上同步机制,使之成为完善的进程间通讯功能。进程间共享环形队列模型—生产者、消费者模型:环形缓冲区数据图:关键代码如下:struct sembuf{
2020-10-17 22:17:17 545
原创 System V信号量---多进程同步
1.概述SystemV信号量并不如Posix信号量那样“好用”,但相比之下它的年代更加久远,但是SystemV使用的却更加广泛(尤其是在老系统中)。在学习Posix信号量的时候,已经大概清楚了二值信号量和计数信号量是什么东西。在接触SystemV信号量之后,这里有一个新的概念叫做:计数信号量集。其实就是把信号量放入数组中,不过都用一些特别的结构封装。1.信号量结构体内核为每个信号量集维护一个信号量结构体,可在<sys/sem.h>找到该定义:struct semid_ds {struc
2020-10-17 15:59:34 528
转载 linux的两种共享内存方式---mmap和shmat区别
linux中的两种共享内存。一种是我们的IPC通信System V版本的共享内存,另外的一种就是我们今天提到的存储映射I/O(mmap函数)在说mmap之前我们先说一下普通的读写文件的原理,进程调用read或是write后会陷入内核,因为这两个函数都是系统调用,进入系统调用后,内核开始读写文件,假设内核在读取文件,内核首先把文件读入自己的内核空间,读完之后进程在内核回归用户态,内核把读入内核内存的数据再copy进入进程的用户态内存空间。实际上我们同一份文件内容相当于读了两次,先读入内核空间,再从内核空间读
2020-10-16 17:13:46 2838
原创 互斥锁、条件变量
场景描述:多线程环境下,少部分线程作为生产者产生event(event事件产生速度较慢),其他大部分线程作为消费者(消费需求旺盛,频繁轮询event队列),这时候就会产生一个问题,消费者线程不断的轮询lock去查看event队列的情况,导致锁频繁的申请释放,大量消耗系统性能,这种场景下(伪代码如下:),单一的锁已经无法解决问题,这就需要引入另一种技术—条件变量。生产者线程:while(1){ sleep(10); lock queued.push(node); unlock}消费者线程:
2020-10-16 14:50:24 214
原创 浅谈CGI基本原理和底层基本实现
历史来由:早期的Web服务器,只能响应浏览器发来的HTTP静态资源的请求,并将存储在服务器中的静态资源返回给浏览器。随着Web技术的发展,逐渐出现了动态技术,但是Web服务器并不能够直接运行动态脚本,为了解决Web服务器与外部应用程序(CGI程序)之间数据互通,于是出现了CGI(Common Gateway Interface)通用网关接口。简单理解,可以认为CGI是Web服务器和运行其上的应用程序进行“交流”的一种约定。简单地说CGI就是web服务器上的一种执行动态页面计算的外部逻辑计算扩展程序(we
2020-10-09 11:24:06 2986
转载 InnoDB事务日志(redo log 和 undo log)详解
数据库通常借助日志来实现事务,常见的有undo log、redo log,undo/redo log都能保证事务特性,undolog实现事务原子性,redolog实现事务的持久性。为了最大程度避免数据写入时io瓶颈带来的性能问题,MySQL采用了这样一种缓存机制:当query修改数据库内数据时,InnoDB先将该数据从磁盘读取到内存中,修改内存中的数据拷贝,并将该修改行为持久化到磁盘上的事务日志(先写redo log buffer,再定期批量写入),而不是每次都直接将修改过的数据记录到硬盘内,等事务日志持
2020-10-07 18:19:31 691
转载 MySQL索引-B+树(看完你就明白了)
索引简述:索引是一种数据结构,用于帮助我们在大量数据中快速定位到我们想要查找的数据。索引最形象的比喻就是图书的目录了。注意这里的大量,数据量大了索引才显得有意义,如果我想要在 [1,2,3,4] 中找到 4 这个数据,直接对全数据检索也很快,没有必要费力气建索引再去查找。索引在 MySQL 数据库中分三类:B+ 树索引—Hash 索引—全文索引。我们今天要介绍的是工作开发中最常接触到的 InnoDB 存储引擎中的 B+ 树索引。要介绍 B+ 树索引,就不得不提二叉查找树,平衡二叉树和 B 树这三种数
2020-10-07 14:03:12 277
转载 浅谈单例模式线程安全
一、深⼊理解函数内静态局部变量初始化1.1、场景分析首先分析一段代码:#include<iostream>using namespace std;void foo(bool recur);int bar(bool recur) { cout<<"bar called\n"; if(recur) { foo(false); } return 0xFAFAFA;}void foo(bool recur) { cout<<"foo called
2020-10-06 11:24:06 466
原创 浅谈布隆过滤器
什么是布隆过滤器布隆过滤器是一种数据结构,比较巧妙的概率型数据结构(probabilistic data structure),特点是高效地插入和查询,可以用来告诉你 “某样东西一定不存在或 者可能存在”。相比于传统的 List、Set、Map 等数据结构,它更高效、占用空间更少,但是缺点 是其返回的结果是概率性(存在误差)的,而不是确切的注意:不同的数据结构有不同的适用场景和优缺点,你需要仔细权衡自己的需求 之后妥善适用它们,布隆过滤器就是践行这句话的代表。业务场景问题思考:1:使用word文档
2020-10-05 16:58:51 639 1
转载 Redis源码剖析(跳表)
在树形结构中,常见的平衡树有AVL树和红黑树,但是由于AVL树过于平衡,导致维护平衡所需的代价过大,使用的不多,不过其中几种旋转算法还是值得学习的。取而代之的是较为平衡的红黑树,STL中的map和set都是采用红黑树实现的,插入和查找效率为O(logN)。 而跳表也是一种较为平衡的...
2020-10-04 17:42:29 195
原创 浅谈tcp机制
TCP 协议中的 Window Size与吞吐量原地址:http://blog.sina.com.cn/s/blog_c5c2d6690102wpxl.htmlTCP协议中影响实际业务流量的参数很多,这里主要分析一下窗口的影响。TCP窗口目的为了获得最优的连接速率,使用TCP窗口来控制流速率(flow control),滑动窗口就是一种主要的机制。这个窗口允许源端在给定连接传送数据分段而不用等待目标端返回ACK,一句话描述:窗口的大小决定在不需要对端响应(acknowledgement)情况下传
2020-09-13 18:45:22 743
kingate-2.0
2018-10-17
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人