自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 收藏
  • 关注

原创 徒手调优实现一个支持百万级并发服务器

提问:什么是高并发服务器,高并发指的是什么?回答:单位时间能够承载的客户端最大数量称为并发。包括同时最大连接客户端数量以及同时处理客户端请求数量,即对应业务的承载能力。很多朋友认为服务器能同时建立连接客户端的最大数量就是并发量,这是片面的。无论什么业务,客户端与服务器三次握手建立起连接,这只是完成了第一步,每一个客户端都代表了一个用户,会有不同的请求,会产生对应的数据,会进行前端展示,这些都有对应的瓶颈,比如大量客户端都连接上了我们的服务器,但是如果数据库落盘速度跟不上,有可能会导致用户数据丢失,前

2020-12-14 15:56:36 1620 9

原创 对景深概念最好的动态模拟实验网站

​​​​​​​http://graphics.stanford.edu/courses/cs178/applets/dof.html​​​​​​​w摄影相机景深概念涉及到4个参数,斯坦福确实牛,这种动态网站学术性的真的很棒,f代表焦距F-number代表光圈数量Subject Distance代表物距circle of confusion代表sensor(传感器)的长度这四个参数在该网站上可调节,最后描述出景深距离。...

2022-05-29 19:04:11 359

原创 Linux内核--第九篇博客--物理内存组织结构

一、系统调用mmap 系统调用mmap用来创建内存映射,把创建内存映射主要工作委托给do_mmap函数, 内核源码文件处理:mm/mmap.c 进程对虚拟内存空间进行管理是通过两种数据结构:红黑树和链表。 众所周知,虚拟内存区域使用起始地址和结束地址描述,链表按起始地址递增排序,链表的 红黑树是平衡二叉查找树,它按照起始地址排序,使用红黑树的好处是:1、在红黑树种查找一个内存虚拟地址的速度很快,增加一个新区域到红黑树,刚好新增的区域会落在最前面。像...

2021-09-20 13:30:27 132

原创 Linux内核--第八篇博客--内存映射原理及系统调用

一、内存映射原理内存映射即在进程的虚拟地址空间中创建一个映射,分为两种:(1)文件映射:文件支持的内存映射,把文件的一个区间映射到进程的虚拟地址空间,数据源是存储设备上的文件。(2)匿名映射:没有文件支持的内存映射,把物理内存映射到进程的虚拟地址空间,没有数据源。【内存映射的原理】 创建内存映射时,在进程得用户虚拟地址空间中分配一个虚拟内存区域。内核采用延迟分配物理内存得策略,在进程第一次访问虚拟页得时候,产生缺页异常。如果是文件映射,那么分配物理页,把文件指定区间的数据读到物理页..

2021-06-04 22:01:03 424 1

原创 Linux内核--第七篇博客--内核内存布局和堆管理

一、内存管理架构内存管理子系统架构可以分为:用户空间、内核空间及硬件部分3个层面,具体结构如 下图所示:1、用户空间:应用程序使用malloc()申请内存资源/free()释放内存资源。 2、内核空间:内核总是驻留在内存中,是操作系统的一部分。内核空间为内核保留, 不允许应用程序读写该区域的内容或直接调用内核代码定义的函数。 3、硬件:处理器包含一个内存管理单元(Memory Management Uint,MMU)的部 件,负责把虚拟地址转换为物理地址。二.

2021-05-23 22:45:24 175 2

原创 字符编码Unicode原理

1 字符集和字符编码的区别和联系◼ 字符集:多个字符的集合。例如GB2312是中国国家标准的简体中文字符集,GB2312收录简化汉字(6763个)及一般符号、序号、数字、拉丁字母、日文假名、希腊字母、俄文字母、汉语拼音符号、汉语注音字母,共 7445 个图形字符。 ◼ 字符编码:把字符集中的字符编码为(映射)指定集合中的某一对象(例如:比特模式、自然数序列、电脉冲),以便文本在计算机中存储和通过通信网络的传递。◼ 字符编码:把字符集中的字符编码为(映射)指定集合中的某一对象(例如:比特模式、自然数.

2021-05-21 15:21:26 1825 1

转载 2021-05-21

关于UCS万国码,本来想自己写的,发现了一篇好文,转载之Unicode - UCS - 万国码通用字符集 - UCS(Universal Character Set)首先要说明的是Unicode和UCS并不是完全相同的概念Unicode的实现方式不同于编码方式。一个字符的Unicode编码是确定的。它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。Unicode符号需要字节数不等,从1个字节到4个字节,甚至更多。这里就有个严重的问题,计算机怎么知道三个字节表示一个符号,而不是分别

2021-05-21 11:07:52 71

原创 Linux内核--第六篇博客--内核内存布局和堆管理

一、内核内存布局 64位Linux一般使用48位来表示虚拟地址空间,42位表示物理地址,通过命令:cat /proc/cpuinfo。ARM64架构处理器采用48位物理寻址机制,最大可寻找256TB的物理地址空间。对于 目前应用完全足够,不需要扩展到64位的物理寻址。虚拟地址也同样最大支持48位寻址,所以在处理器架构设计上,把虚拟地址空间划分为两个空间,每个空间最大支持256TB,linux内核 在大多数体系结构上都把两个地址划分为:用户空间和内核空间。用户空间:0x0000_...

2021-05-20 23:58:21 326

原创 Linux内核--第五篇博客--RCU机制及内存优化屏蔽

一、RCU机制RCU英文全称为Read-Copy-Update,顾名思义就是 “读 - 拷贝-更新”,是内核中重要 的同步机制。Linux内核已有原子操作、读写信号量等等锁机制,为何会单独设计一个比较复杂的新机制?1、RCU原理RCU记录所有指向共享数据的指针的使用者,当要修改该共享数据时,首先创建一个 副本,在副本中修改。所有读访问线程都离开读临界区之后 ,指针指向新的修改后副本的指针,并且删除旧数据。2、链表操作RCU能保护的不仅仅是一般的指针。内核也提供标准函数,使得能通过R

2021-05-15 23:53:08 269

原创 Linux内核--第四篇博客--实时调度类即SMP

一、实时调度类源分析 1、实时调度实体sched_rt_entity数据结构linux内核源码目录:include/linux/sched.h。linux内核源码目录:/kernel/sched/rt.c。2、实时调度类rt_sched_class数据结构3、实时调度操作核心详解进程插入enqueue_task_rtlinux内核源码目录:/kernel/sched/rt.c。进程选择pick_next_task_rt实时调度会选择最高优先级的实时进.

2021-04-11 17:56:20 340

原创 Linux内核--第三篇博客--调度器分析及完全公平调度器CFS

一、调度器分析1、调度器及其功能 内核中用来安排进程执行的模块称为调度器(scheduler),它可以切换进程状态(processstate)。例如执行、可中断睡眠、不可中断睡眠、退出、暂停等。调度器是CPU中央处理器的管理员,专门用来管理时间的,主要负责完成做两件事情:一、选择某些就绪进程来执行,二、是打断某些执行的进程让它们变为就绪状态。调度器分配CPU时间的基本依据就是进程的优先级。上下文切换(contextswitch):将进程在CPU中切换执行的过程,内核承担此..

2021-04-04 00:30:49 199 2

原创 Linux内核--第二篇博客--进程表示及系统调用

一、什么是进程 操作系统作为硬件的使用层,提供使用硬件资源的能力,进程作为操作系统使用层,提供使用操作系统抽象出的资源层的能力。 进程:是指计算机中已运行的程序。进程本身不是基本的运行单位,而是线程的容器。程序本身只是指令、数据及其组织形式的描述,进程才是程序(那些指令和数据)的真正运行实例。 进程的四要素 1、有一段程序代其执行; 2、有进程专用的系统堆栈空间。 3、在内核有task_struct数据结构; 4、进程有独立的存储空间,拥...

2021-03-09 18:31:27 191

原创 Linux内核--第一篇博客--Linux内核源码结构组成

一、Linux内核的特征 1.linux内核组织形式为整体式结构 linux内核是面向过程的,每一个模块单独编译,最后链接成一个独立的目标程序。这种结构最大的特点是内部结构简单,子系统容易进行访问,因此内核的工作效率比较高。基于过程的结构有助于不同业务的成员进行基于不同业务的开发,基于这种角度,linux内核又是开放式的开发,它允许任何人对其不同模块进行完善和再次开发。 2.进程调度方式简单而有效。 可以说linux追求效率方面领先,体现在调度方式上也是别具一格,对...

2021-03-08 20:57:20 402

原创 Goland以module方式创建工程

创建工程package mainimport "github.com/gin-gonic/gin"func main() { r := gin.Default() r.GET("/ping", func(c *gin.Context) { c.JSON(200, gin.H{ "message": "darren", }) }) r.Run() // listen and serve on 0.0.0.0:..

2020-12-29 15:14:03 151 1

转载 struct与字节对齐——深入理解

本来想自己总结一下的,后来看到知乎有大牛写的总结非常好,转载之。https://zhuanlan.zhihu.com/p/210999004————————————————————————————————————————**一句话总结:编译器下,全体变量成员进行边界(地址)对齐!**两句话解释:①编译器,会先让struct结构体内部成员按顺序进行边界(存放地址)对齐,对齐标准是各自变量类型的长度;②然后再让struct结构体进行最后的字节补充(方便下一个变量对齐),对齐标准是结.

2020-12-24 17:28:50 346 2

原创 随笔:进程间描述字fd的传递

描述字的传递,就是将一个进程中的描述字传递到另一个进程中,使得该描述字依然有效。在多进程网络的CS模式下,服务器fork产生的子进程在fork调用返回后,子进程共享父进程的所有打开的描述字。即使在子进程中调用exec函数,所有描述字通常还是保持打开的状态,也就是描述子是跨exec函数的。这也是为什么在exec调用之后的进程里仍然可以调用父进程共享的套接字的原因。但是这种实现并不能解决子进程的描述字传递给父进程的需求,对于无亲缘关系的进程之间传递描述字就更加不可能。遇到这种跨进程通信的问题,一般的

2020-12-24 16:35:27 718

原创 go-admin后台设计之casbin权限管理

1.概要权限管理⼏乎是每个系统或者服务都会直接或者间接涉及的部分.权限管理保障了资源(⼤部分时候就是数据)的安全,权限管理⼀般都是和业务强关联,每当有新的业务或者业务变化时,不能将精⼒完全放在业务实现上,权限的调整往往耗费⼤量的精⼒.其实,权限的本质没有那么复杂,只是对访问的控制⽽已,有⼀套完善的访问控制接⼝,再加上简单的权限模型.权限模型之所以能够简单,就是因为权限管理本身并不复杂,只是在和具体业务结合时,出现了各种各样的访问控制场景,才显得复杂.2.PERM模型PERM(Policy,Eff

2020-12-23 17:17:35 1554

原创 两数之和

#include<iostream>#include <vector>using namespace std;class Solution {public:    vector<int> twoSum(vector<int>& nums, int target)    {        unordered_map<int...

2019-01-14 17:31:17 148

转载 gdb工作原理和内核实现

gdb工作原理和内核实现 Tools  2013-05-19 gdb主要功能的实现依赖于一个系统函数ptrace,通过man手册可以了解到,ptrace可以让父进程观察和控制其子进程的检查、执行,改变其寄存器和内存的内容,主要应用于打断点(也是gdb的主要功能)和打印系统调用轨迹。一、ptrace函数函数原型如下:#include <sys/ptrace.h>l...

2018-10-15 17:45:21 307

原创 10.17 abort function

读了一下abort的源码,里面有内容很不理解,就是在最后第二次调用kill,后来想明白了,因为有可能该进程自己修改了SIGABRT信号的执行函数,所以再次对流进行flush,再次将信号sa_handler 设置成默认执行,再次发送SIGABRT,这样保证abort的健壮性。只能说设计的真TMD好。...

2018-09-01 00:59:11 129

转载 C++虚函数详解+实例,个人认为说的很明白,之前想写一篇,后来发现这篇总结的很好

详解C++中的纯虚函数(虚函数区别)&多态性以及实例应用http://www.cnblogs.com/haoyuanyuan/archive/2013/01/23/2872866.html在C++中的一种函数申明被称之为:纯虚函数(pure virtual function).它的申明格式如下:class CShape{p

2016-05-26 21:17:39 555

转载 CRT与Windows的关系【转】

CRT原先是指Microsoft开发的C Runtime Library(C语言运行时库),用于操作系统的开发及运行。后来在此基础上开发了C++ Runtime Library,所以现在CRT是指Microsoft开发的C/C++ Runtime Library。在VC的CRT/SRC目录下,可以看到CRT的源码,不仅有C的,也有C++的。  CRT原先的目的就是支持操作系统的运行。因为W

2016-05-21 19:39:36 403

转载 迭代服务器与并发服务器

大多数TCP服务器是并发的,大多数UDP服务器是迭代的。如果服务一个客户请求的时间不长,使用迭代服务器没有太大问题,一旦客户请求的时间需要花费很长,不希望整个服务器被单个客户长期占用,而希望同事服务多个客户,就需要选择并发服务器了。迭代服务器程序轮廓int listenfd,connfd;listenfd = socket( ... );bind(listen, ... )

2016-04-12 16:10:41 1871

原创 关于cache line 。内存分配算法 slab

http://baike.baidu.com/link?url=oNua6Uugasd9L0IZ1fWiUIABErsN59uGoAIwtSXzBbCgJ6IGddtz9HFR5dekbga6z4ot1F7sBe_1psjb5Q3G5q

2016-01-13 20:30:50 609

转载 汇编

拆弹过程中,遇到一条objdump给出的相当奇怪的指令:lea    0x0(%esi,%eiz,1),%esi我们知道那些常用的x86寄存器,那么,%eiz又是什么?google了一下,除了google非常好心地询问我是不是想找%eip之外,相当多询问同样问题的人得到这样的解答:%eiz是一个伪寄存器(pseudo-register ),总是读出0值,就像MIPS的R0那

2015-09-12 19:11:08 734

原创 关于网络编程 (一)socket 杂记整理

1、  为了增加效率,可以考虑采用无异常的函数在.net2.0中Socket.Send,Socket.Receive有了无异常的函数 Socket.Send(Byte[], Int32, Int32, SocketFlags, SocketError) Socket.Receive(Byte[], Int32, Int32, SocketFlags, SocketError)

2015-01-28 23:52:18 587

原创 Unix network programming

1.部署环境。这个就不用写了 参考  http://blog.csdn.net/hantangsongming/article/details/20453349 已经写的很好了。 环境:$ cat /etc/issueUbuntu 12.04.1 LTS \n \l$ cat /proc/versionLinux version 3.2.0-48-gen

2015-01-18 17:32:11 989 3

原创 mysql 随笔

插入一个新用户:INSERT INTO mysql.user(Host,User,Password) VALUES('120.24.227.90','root',PASSWORD('123456'));

2014-12-28 15:00:47 415

转载 阿里云ECS+RDS+OCS低成本提升系统性能

阿里云ECS+RDS+OCS低成本提升系统性能标准阿里云最近的活动很给力:ECS 就是云服务器了,就不多解释了,最低配 550起步 (青岛495)现在可免费使用1核心1G内存半年,宽带费,数据盘费用自理(1M的138半年),半年后可降级续费RDS 50一年(240M内存,5G容量,60并发连接数等)OCS 128M内存实例免费(开放缓存服务OCS,你可以理解

2014-12-24 00:35:28 2084

转载 如果我是“小白”,购买ECS(云服务器)该选哪个地域?

如果我是“小白”,购买ECS(云服务器)该选哪个地域?第一步:明确同地域的ECS、RDS、OSS内网可以互通,不同地域的产品内网不互通,SLB不支持跨地域部署。        如杭州节点ECS与青岛节点的ECS、RDS、OSS内网不互通;青岛节点SLB只支持青岛ECS的部署等第二步:  【方法一】建议选择最靠近您主要访问用户的地域,可能减少延迟时间和提高下载或访问速

2014-12-23 23:44:40 4623 2

转载 基础知识框架完善

最大传输单元,是指一种通信协议的某一层上面所能tong

2014-09-27 23:54:20 633

转载 struct linger 用法

TCP连接断开的时候调用closesocket函数,有优雅的断开和强制断开两种方式.那么如何设置断开连接的方式呢?是通过设置socket描述符一个linger结构体属性。linger结构体数据结构如下:struct linger{int l_onoff;int l_linger;};有三种组合方式:第一种l_onoff

2014-08-22 02:28:20 816

原创 Vim 随笔,For myself!

========================================= - 小键盘 0 到 9 *keypad-0* *keypad-9*  Shift+键 *shift* *  Control+键 *control* *ctrl* * M-...> Alt+键 或 meta+键 *meta* *alt* *M-*  同 m-...> *

2014-05-04 02:14:58 462

空空如也

空空如也

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

TA关注的人

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