自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 testtest

int* procRecvfunc(void* arg){ //int index = *(int*)(arg); int fd; int epollfd = g_iRecvEpollFd; struct epoll_event events[MAX_EVENT_NUMBER]; char buf[TCP_BUFFER_SIZE]; int i,ret; unsigned long ulCount = 0; unsigned long ulR

2021-12-29 22:01:18 2100

原创 看看SIMD的魅力

#include <string.h>#include <stdio.h>#include <stdlib.h>#include <ctype.h>#include <unistd.h>#include <sys/types.h>#define __USE_GNU#include "common.h"typedef unsigned int uint32_t;struct data{ uint32_t uiV..

2021-09-29 20:52:41 135

原创 常使用的命令

进程下各thread的cpu占用情况ps -eLo pid,lwp,pcpu | grep 30222

2021-09-16 09:23:32 125

原创 利用cpu cache、原子lock实现超高并发场景下hash设计附源码

在码农界,最基础、最常用的数据结构站出来几位,哈希表(又叫散列)应该是够资格的; 列几处哈希表这位重兵把守的地方: 1. 在linux os kernel,在四层UDP和TCP各有一个全局hashtable,报文经过协议栈到四层后由4元组算出哈希索引找到对应的socket表项,从而关联到对应的用户进程; 2. 全互联网都在用的缓存中间件redis,就是一个hashtable上挂了各种各样的数据结构;...

2021-09-07 13:41:24 285

原创 2021-09-06

┌────────────────────────────────────────────────────────────────────┐ │ ? MobaXterm Personal Edition v7.6 ? │ │ (X server, SSH client and GNU/Cygwin tools) │ │ ...

2021-09-06 07:49:20 438

原创 原子操作耗时分析

main_lock.c#include <string.h>#include <stdio.h>#include <stdlib.h>#include <sys/epoll.h>#include <unistd.h>#include <sys/syscall.h>#include <sys/types.h>#define __USE_GNU#include <sched.h>#include

2021-09-02 13:56:37 240

原创 hash研究

mhash.c#include <pthread.h>#include <stdlib.h>#include <stdio.h>#include <string.h>#include <sys/types.h>#include <ctype.h>#include <stdint.h>#include "common.h"#include "mhash.h"uint64_t g_uiquerycount

2021-08-27 13:38:12 132

原创 字节序及内存对齐

低 高|————————————————————————| 内存左低右高0x12345678大端序: 0x12345678 高位存低地址,低位存高地址 也是肉眼序、网络序列 只要少数cpu是大端序小端序: 0x78563412 高位存高地址,低位存低地址 x86 arm等主流cpu是小端序[root@localhost test]# gcc main_test.c[root@localhost test]# ./a.outD

2021-08-26 15:12:29 277

原创 linux gcc 原子操作函数

type __sync_fetch_and_add (type ptr, type value, …)// 将value加到ptr上,结果更新到ptr,并返回操作之前ptr的值type __sync_fetch_and_sub (type ptr, type value, …)// 从ptr减去value,结果更新到ptr,并返回操作之前ptr的值type __sync_fetch_and_or (type ptr, type value, …)// 将ptr与value相或,结果更新到ptr,

2021-08-26 11:00:17 404

原创 设置cpu亲和力demo

#include <sys/time.h>#include <stdlib.h>#include <stdio.h>#include <sys/epoll.h>#include <unistd.h>#include <sys/syscall.h>#include <sys/types.h>#define __USE_GNU#include <sched.h>#include <ctype.

2021-08-23 15:55:04 218

原创 高并发hash性能研究

mhash.htypedef struct node{ unsigned char strkey[48]; void *pdata; struct node *next;}node;typedef struct hashtable{ struct node * head; int count; pthread_spinlock_t lock;}hashtable;#define ERROR_SUCCESS 0#define ERROR_FAIL

2021-08-21 18:01:43 113

转载 认识中断是什么

本文转自 作者:闪客sun 公众号:低并发编程本来想写内核如何接收一个网络包这个过程,但发现把整个过程捋顺了,还是很难的。推导整个过程的起点是中断,包括硬中断和软中断。而这个过程要是讲清楚吧,感觉在整个网络包接收原理的大流程中有点喧宾夺主。但要是一笔带过吧,那对于这块有困惑的人就很难受,一切的起点没整明白在心里总是个疙瘩。所以,单拎出来一个主题中断,给大家把这个问题搞明白了,之后讲内核收包时直接引过来就好了,不想看的直接过,想看的就可以有篇前置文章详细了解,美滋滋。另外,整个操作系统就是一个中

2021-08-19 13:58:05 275

原创 如何测试一次内存访问的耗时?

程序在运行的过程访问主存每次是按cpu cache line 64B访问的(主流cpu cache line一般都是64B),如果命令L1 cache耗时约1ns,如果命令L2 cache耗时约3ns,如果命令L3 cache耗时约12ns,如果访问内存约50-100ns,上面这些数据都是从些网上的文章资料得知的。 如何写段代码测试下内存的访问时间,结果应该接近50-100ns ,本文介绍下测试方法: 1. 申请几段连续的虚拟内存,总大小4GB; 2. 给申请的4GB内存按页...

2021-07-30 00:20:30 2250 1

原创 高并发编程

1s 1000ms 1000 000us 1000 000 000ns 1000 000 000 000ps以上时间单位分别是秒、毫秒、微妙、纳秒、皮秒,上面这么多个0都表示1秒的时间计算机系统中典型的操作耗时表操作耗时备注L1 cache访问1nsL2 cache访问3nsL3 cache访问12ns一次访问内存64B65ns当前...

2021-07-23 22:46:41 213 1

原创 什么是linux namespace?什么又是pod?图文助你速懂

什么是namespace?什么又是命名空间?以是怎么做到的隔离?初接触这些概念让人整的很懵,以为是很高深的东西,整明白了,其实就简单的很。

2021-07-08 17:14:34 242

原创 linux作为服务端应该合理设置哪些参数---swappiness

swappiness参数值从0到100,比如设置成10表示物理内存还剩10%时会使用swap分区;通常linux作为服务端运行redis、kafka等这类中间件,建议设置成1;查看系统swappiness值:设置系统swappiness值:/etc/sysctl.conf 文件中增加一行:vm.swappiness=11执行sysctl -p生效配置注意:sysctl vm.swappiness=10 这样修改,未保存配置,重启后还原成以前的...

2021-07-08 09:53:19 332

原创 kafka linux单机简易安装

前提是先安装好JDK下载kafka版本http://kafka.apache.org/downloadslinux上执行下载:wget https://mirrors.tuna.tsinghua.edu.cn/apache/kafka/2.8.0/kafka_2.13-2.8.0.tgz解压包:tar -zxvf kafka_2.13-2.8.0.tgzzookeeper直接使用kafka中自带的,修改zookeeper配置如果zookeeper是集群配置,zookeepe

2021-07-07 21:04:27 141 1

原创 kafka为什么要部署在linux上

首先我们先看看要把 Kafka 安装到什么操作系统上。说起操作系统,可能你会问 Kafka 不是 JVM 系的大数据框架吗?Java 又是跨平台的语言,把 Kafka 安装到不同的操作系统上会有什么区别吗?其实区别相当大!的确,如你所知,Kafka 由 Scala 语言和 Java 语言编写而成,编译之后的源代码就是普通的“.class”文件。本来部署到哪个操作系统应该都是一样的,但是不同操作系统的差异还是给 Kafka 集群带来了相当大的影响。目前常见的操作系统有 3 种:Linux、Windows 和

2021-07-07 20:07:33 294

原创 java的static和final

import java.util.ArrayList;public class HelloMain { public static void main(String[] args) { Person p1 = new Person(555); System.out.println(p1.count); System.out.println(p1.ID); Person p2 = new Person(666); S

2021-06-30 16:06:27 78

原创 Java中的abstract class和interface

1.abstract class 只能做为父类被extends,不能实例对象;2.不一定有abstract function;3.有abstract function的class一定是abstract class;4.abstract function由子类实现;public abstract class Employee{ private int iAge; private String strName; public Employee(String strParam

2021-06-29 16:15:38 426

原创 gcc支持的原子操作函数系统

type __sync_fetch_and_add(typeptr,type value,…);// m+ntype __sync_fetch_and_sub(typeptr,type value,…);// m-ntype __sync_fetch_and_or(typeptr,type value,…); // m|ntype __sync_fetch_and_and(typeptr,type value,…);// m&ntype __sync_fetch_and_xor(typep

2021-06-29 11:22:52 93

原创 Java泛型

泛型类:public class Stu<N, A, S> { private N name; // 姓名 private A age; // 年龄 private S sex; // 性别 // 创建类的构造函数 public Stu(N name, A age, S sex) { this.name = name; this.age = age; this.sex = sex; }

2021-06-28 18:58:08 68

原创 Java的transient这人关键字,有点无聊

Java语言的关键字,变量修饰符,如果用transient声明一个实例变量,当对象存储时,它的值不需要维持。换句话来说就是,用transient关键字标记的成员变量不参与序列化过程。作用:Java的serialization提供了一种持久化对象实例的机制。当持久化对象时,可能有一个特殊的对象数据成员,我们不想用serialization机制来保存它。为了在一个特定对象的一个域上关闭serialization,可以在这个域前加上关键字transient。当一个对象被序列化的时候,transien...

2021-06-28 17:26:10 68

原创 UDP发包极限测试

#include <sys/types.h>#include <sys/socket.h>#include <string.h>#include <netinet/in.h>#include <stdio.h>#include <stdlib.h>#include <arpa/inet.h>#include <unistd.h>#include <errno.h>#include &

2021-06-06 16:35:35 777

原创 raspberry pi 4 ubuntu新安装

raspberry pi 4 ubuntu安装官网下载ubuntu-20.04.2-preinstalled-server-arm64+raspi.img.xzubuntu默认登录账号密码都是ubuntu,登录会要求改新密码开启root登录,sudo passwd root,设置root密码,sudo root切到root/etc/hostname是修改主机名配置无线网卡/etc/netplan/50-cloud-init.yamlnetwork: ethern

2021-06-06 16:20:28 350

原创 linux性能工具

修改进程在指定cpu上运行:taskset -pc 3 21184进程启动时指定CPU: taskset -c 1 ./redis-server ../redis.conf1.统计丢包netstat -sroot@U2:~# netstat -s -uIcmpMsg: InType0: 6 InType3: 2840330 InType5: 715 InType8: 11 InType11: 48 OutType0: 11 OutT...

2021-06-05 16:14:51 380 1

原创 快速排序

// quick_sort.gopackage mainimport ( "fmt")func findKth(a []int, K int) int { iLen := len(a) var i, j, v, flag, pos int i = 0 j = iLen - 1 flag = 1 v = a[0] for i < j { if flag > 0 { if a[j] >= v { j-- } else { a[i].

2021-05-08 16:42:27 68

原创 pthread_cond_wait例子

使用pthread_cond_wait方式如下:pthread _mutex_lock(&mutex)while或if(线程执行的条件是否成立)pthread_cond_wait(&cond, &mutex);线程执行pthread_mutex_unlock(&mutex);#include<stdio.h>#include<sys/types.h>#in...

2021-05-07 14:08:51 253

原创 const和static总结

1. const 修饰 *p 在*左int a = 10;constint*p=&a; // const 在 * 左边,表示 *p 不能修*p=11;//编译错误a = 11; // 修 a的值是可以的,同时 *p 改一样被改了2.const修饰p,指向的对象可变,指针的指向不可变:inta=9;intb=10;int*constp=&a;//p是一个const指针*p=11;//合法,p=...

2021-04-03 12:47:18 117

原创 Linux 4.5/4.6 中对 SO_REUSEPORT 的改进

Linux 3.9 加入了SO_REUSEPORT 选项,可以提高 UDP 和 TCP server 的伸缩性,Linux4.5/4.6分别进一步改进了 UDP 和 TCP 的 SO_REUSEPORT 实现。本文以 UDP 的实现为例来讲解,TCP 与之类似。UDP 协议的主要数据结构是两张 hash 表,指向 UDP 协议控制块 struct udp_sock。其中 hash 以 port 为 key,hash2 以 IP+port 为 key。这两张 hash 表的大小可以从 ...

2021-03-01 18:50:15 404

原创 树莓派ubuntu 20.04wifi

root@ubuntu:/etc/netplan# ls50-cloud-init.yaml 50-cloud-init.yaml_bakroot@ubuntu:/etc/netplan# cat 50-cloud-init.yaml# This file is generated from information provided by the datasource. Changes# to it will not persist across an instance reboot. To...

2021-02-25 07:51:50 212

原创 系统调用及访存时间测试

#include <sys/types.h>#include <sys/socket.h>#include <sys/time.h>#include <string.h>#include <netinet/in.h>#include <stdio.h>#include <stdlib.h>#include <arpa/inet.h>#include <unistd.h>#includ

2021-02-22 11:04:36 273

原创 volatile 的作用

add volatile 0add volatile 1monitor change volatile 1add volatile 2monitor change volatile 2add volatile 3monitor change volatile 3add volatile 4monitor change volatile 4add volatile 5monitor change volatile 5-------------------------...

2021-01-29 18:09:56 61

原创 linux笔记

1. 平均负载,性能查看平均负载,表示,处于:可运行状态(正在运行、等待调度的)、不可中断状态(比如wait lock...) 的进程数量()[root@43jz ~]# uptime13:42:36 up 34 days, 3:08, 3 users, load average: 0.57, 0.18, 0.09 [root@43jz ~]#[root@43jz ~]#[root@43jz ~]#查看cpu数量,/proc/cpuinfo如果 ...

2021-01-22 14:02:05 104 1

原创 cpu cache预取原则

#include <sys/time.h>#include <stdlib.h>#include <stdio.h>#include <pthread.h>#define MAX_N1 0#define MAX_N2 0#define MAX_N3 0#define MAX_N4 0#define MAX_N5 1#define LOOP_NUM 1000*1000*1000long long ustime(void) ...

2021-01-19 12:51:20 438

原创 原子操作例子分析

#include <sys/time.h>#include <stdlib.h>#include <stdio.h>long long ustime(void) { struct timeval tv; long long ust; gettimeofday(&tv, NULL); ust = ((long)tv.tv_sec)*1000000; ust += tv.tv_usec; return ust;...

2021-01-15 16:32:14 252

原创 休眠状态:TASK_INTERRUPTIBLE、TASK_UNINTERRUPTIBLE

由lock进入的休眠是TASK_UNINTERRUPTIBLE(相当于有活干,只是缺乏料),这个时候其它线程要是发sigal,是不唤醒的;由epoll_wait进入的眠是TASK_INTERRUPTIBLE(相当于没活干,不缺啥),这个时候其它线程要是发sigal,是可以唤醒的;...

2021-01-14 10:23:50 788

原创 L1 L2 L3 MEM速度与大小

以intel为例:L1 访问约3个周期,1ns左右L2访问约10个周期,3ns左右,正常约10MB,intel整了个SmartCache,大概是2个core把10MB共享用,这样速度要慢点,但是就是20MB了L3 访问约50个周期,20ns左右,当前最好的cpu L3约 20MB+memory访问约几百个周期,算100ns+好了一段程序在运转过程中,据统计80%以上都被放在cpu cache里命中了system call是栈空间切换,用户态到内核态切,所有的寄存器...

2021-01-12 12:17:03 1113 1

原创 硬盘的物理结构

一、物理结构:硬盘在物理结构上由头盘组件和控制电路板两大部分组成。㈠头盘组件头盘就是磁头和盘片的意思。头盘组件包括盘体、电机、磁头等部件。所有部件密封在外壳中,绝对无尘、真空,如果你一旦开启了这个密封外壳,那么这个硬盘就会宣告作废。其中盘体由单个或多个盘片组成,各个盘片之间由垫圈隔开,盘片表面极为平整光滑,并涂有磁性介质,是记录数据的载体。盘片多为铝制品,早期出现过陶瓷制品,现在又出现了玻璃材料。一个盘片对应上下两个盘面,分别对应两个磁头。主轴电机带动盘片作高速转动.由于盘片在高速转动时并不与读...

2021-01-02 18:51:07 2063

原创 操作系统笔记

程序的装入方式:1. 绝对装入,这个Denis Ritchie和Ken Thompson估计干过2.可重定位装入方式,启动时实现逻辑地址到绝对地址的replace3.动态运行时装入方式,运行时实现逻辑地址到绝对地址的replace,这个有relpace有特殊寄存器完成linux上怎么控制2和3的,感觉应该在gcc里面另外gcc的 fPIC是编译共享动态库,这种是整个OS的内存里面只加载一份,不同进程加载的话公共内存代码段,牺牲性能节约内存程序的链接:1.静态链接:对相对地址.

2020-12-31 14:10:29 47

空空如也

空空如也

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

TA关注的人

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