
程序猿
舞动CPU
10年+码农,热爱研究技术原理,追求极致性能; 对高性能有一定的理解,欢迎技术碰撞,可加本人微信: cpu-dance
展开
-
看看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 · 160 阅读 · 0 评论 -
常使用的命令
进程下各thread的cpu占用情况ps -eLo pid,lwp,pcpu | grep 30222原创 2021-09-16 09:23:32 · 152 阅读 · 0 评论 -
利用cpu cache、原子lock实现超高并发场景下hash设计附源码
在码农界,最基础、最常用的数据结构站出来几位,哈希表(又叫散列)应该是够资格的; 列几处哈希表这位重兵把守的地方: 1. 在linux os kernel,在四层UDP和TCP各有一个全局hashtable,报文经过协议栈到四层后由4元组算出哈希索引找到对应的socket表项,从而关联到对应的用户进程; 2. 全互联网都在用的缓存中间件redis,就是一个hashtable上挂了各种各样的数据结构;...原创 2021-09-07 13:41:24 · 317 阅读 · 0 评论 -
如何测试一次内存访问的耗时?
程序在运行的过程访问主存每次是按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 · 2750 阅读 · 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 · 255 阅读 · 1 评论 -
什么是linux namespace?什么又是pod?图文助你速懂
什么是namespace?什么又是命名空间?以是怎么做到的隔离?初接触这些概念让人整的很懵,以为是很高深的东西,整明白了,其实就简单的很。原创 2021-07-08 17:14:34 · 284 阅读 · 0 评论 -
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 · 391 阅读 · 0 评论 -
kafka为什么要部署在linux上
首先我们先看看要把 Kafka 安装到什么操作系统上。说起操作系统,可能你会问 Kafka 不是 JVM 系的大数据框架吗?Java 又是跨平台的语言,把 Kafka 安装到不同的操作系统上会有什么区别吗?其实区别相当大!的确,如你所知,Kafka 由 Scala 语言和 Java 语言编写而成,编译之后的源代码就是普通的“.class”文件。本来部署到哪个操作系统应该都是一样的,但是不同操作系统的差异还是给 Kafka 集群带来了相当大的影响。目前常见的操作系统有 3 种:Linux、Windows 和原创 2021-07-07 20:07:33 · 327 阅读 · 0 评论 -
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 · 101 阅读 · 0 评论 -
快速排序
// 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 · 82 阅读 · 0 评论 -
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 · 290 阅读 · 0 评论 -
系统调用及访存时间测试
#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 · 309 阅读 · 0 评论 -
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 · 89 阅读 · 0 评论 -
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 · 118 阅读 · 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 · 467 阅读 · 0 评论 -
休眠状态:TASK_INTERRUPTIBLE、TASK_UNINTERRUPTIBLE
由lock进入的休眠是TASK_UNINTERRUPTIBLE(相当于有活干,只是缺乏料),这个时候其它线程要是发sigal,是不唤醒的;由epoll_wait进入的眠是TASK_INTERRUPTIBLE(相当于没活干,不缺啥),这个时候其它线程要是发sigal,是可以唤醒的;...原创 2021-01-14 10:23:50 · 822 阅读 · 0 评论 -
操作系统笔记
程序的装入方式:1. 绝对装入,这个Denis Ritchie和Ken Thompson估计干过2.可重定位装入方式,启动时实现逻辑地址到绝对地址的replace3.动态运行时装入方式,运行时实现逻辑地址到绝对地址的replace,这个有relpace有特殊寄存器完成linux上怎么控制2和3的,感觉应该在gcc里面另外gcc的 fPIC是编译共享动态库,这种是整个OS的内存里面只加载一份,不同进程加载的话公共内存代码段,牺牲性能节约内存程序的链接:1.静态链接:对相对地址.原创 2020-12-31 14:10:29 · 66 阅读 · 0 评论 -
喜欢她的理由---芭芭拉·利斯科夫(Barbara Liskov)---2008年图灵奖获得者---提出面向对象的理论并实践了CLU,为后续王者c++、java的诞生提供了理论
如今作为计算机行业的佼佼者,Barbara在谈到自己的经验时,体会最深刻的就是:没有专心致志的精神就不会成功,创造性偶尔会出现,但这不是人所能计划的。专心做一件事,不一定会有创造性的想法,但是这总会让你有所进步,因此,她第一个经验就是,你必须要专心地解决一些问题;但是,同时要谨记不要时时刻刻都想着它,很多有创意的想法都是在比较轻松的时刻出现的。她从来不晚上在家工作,而是喜欢早晨进入工作状态之后再想应该做什么,这个时候往往会有一些好的想法涌现,因此,既要有精力高度集中的时刻,也需要有喘息的机会。她说,有些年轻原创 2020-12-24 10:22:05 · 240 阅读 · 0 评论 -
redis的RDB,牛逼的技巧,父子进程内存共享内存空间写时复制
RDB快照是一次全量备份,存储的是内存数据的二进制序列化形式,存储上非常紧凑。当进行快照持久化时,会开启一个子进程专门负责快照持久化,子进程会拥有父进程的内存数据,父进程修改内存子进程不会反应出来,所以在快照持久化期间修改的数据不会被保存,可能丢失数据。核心知识点:fork的子进程与父进程共享内存空间,这里有个内存管理上“写时复制”的点,需深究操作系统进程管理的实现了!...原创 2020-12-11 21:43:06 · 1087 阅读 · 0 评论 -
数据结构:八大数据结构分类
本文目录:数据结构分类 1、数组 2、栈 3、队列 4、链表 5、树 6、散列表 7、堆 8、图数据结构分类数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成 。常用的数据结构有:数组,栈,链表,队列,树,图,堆,散列表等,如图所示:每一种数据结构都有着独特的数据存储方式,下面为大家介绍它们的结构和优缺点。1、数组数组是可以再内存中连续存储多个元素的结构,在内存中的分配也是连续的,数组中的元素通过数组下标进行访问,数组下..原创 2020-11-13 09:52:09 · 168 阅读 · 0 评论