写在前面 好久没有写博客了,一直在不断地探索响应式DDD,又get到了很多新知识,解惑了很多老问题,最近读了Martin Fowler大师一篇非常精彩的博客The LMAX Architecture,里面有一个术语Mechanical Sympathy,姑且翻译成软硬件协同编程(Hardware and software working together in harmony),很有感悟,说的是要把编程与底层硬件协同起来,这样对于开发低延迟.高并发的系统特别地重要,为什么呢,今天我们就来讲讲CP…
先来一个整体图 一. 大致关系: CPU Cache --> 前端总线 FSB (下图中的Bus) --> Memory 内存 CPU 为了更快的执行代码.于是当从内存中读取数据时,并不是只读自己想要的部分.而是读取足够的字节来填入高速缓存行.根据不同的 CPU ,高速缓存行大小不同.如 X86 是 32BYTES ,而 ALPHA 是 64BYTES .并且始终在第 32 个字节或第 64 个字节处对齐.这样,当 CPU 访问相邻的数据时,就不必每次都从内存中读取,提高了速度. 因为访问内存…
学过JAVA的人都知道,程序运行过程中的临时数据,都是从外部存储设备调入内存(物理内存)中,再进行读写操作的.而计算机在执行程序时,对程序的每条指令都是在CPU中执行的,而指令的执行,势必涉及到对数据的读写操作. 于是就产生了这样一个问题,CPU指令的执行速度是很快的,但是从内存中读取和写入数据的速度却是比较慢的.如果对数据的任何操作,都需要CPU和内存打交道,而由于内存的读取速度远远慢于CPU的执行速度,这样就大大降低了CPU执行的效率,于是就有了CPU高速缓存的概念. CPU,CPU高速缓存…
提高程序效率应该充分利用CPU的高速缓存.要想编写出对CPU缓存友好的程序就得先明白CPU高速缓存的运行机制. i5-2400S: 1.有三级缓存分别为 32k(数据.指令缓存分开,分为32k),256K,6144K(四个CPU之间共享): 2.主频为2.5G,则一个时钟周期为1/2.5x10^9=0.4ns(主频=1/时钟周期). CPI: CPU中每条指令执行所需的机器周期不同CPI:平均每条指令的平均时钟周期个数,注:一个机器周期等于若干个时钟周期,如一个机器周期等于5个时钟周期 MIPS…
在C#编程中玩转枚举,分享我的EnumHelper. 在软件开发过程中,我们经常会为特定的场景下的特定数据定义逻辑意义.比如在用户表中,我们可能会有一个用户状态字段,该字段为整形.如果该字段的值为1则代表用户状态正常,2则代表用户被锁定等等.这些规则应该被写入开发文档里,但是每次都去查文档,也是一件痛苦的事情.其实,在C#中有一个很简单的方法可以实现数据和表象意义之间的转换.枚举既是为此而生. 例如,我们有一个用户状态的枚举,它看起来像这个样子:           C#   1 2 3 4 5…
目录 Code: 物理结构: 缓存行Cache Line 伪共享: 概念: 解决办法: 内存屏障: 理解: 参考: Code: public class Main { static long[][] arr; public static void main(String[] args) { arr = new long[1024 * 1024][8]; // 横向遍历 long marked = System.currentTimeMillis(); for (int i = 0; i < 10…
每个程序员都应该了解的 CPU 高速缓存 英文原文:Memory part 2: CPU caches 来源:oschina [编者按:这是Ulrich Drepper写“程序员都该知道存储器”的第二部.那些没有读过第一部 的读者可能希望从这一部开始.这本书写的非常好,并且感谢Ulrich授权我们出版. 一点说明:书籍出版时可能会有一些印刷错误,如果你发现,并且想让它在后续的出版中更正,请将意见发邮件到lwn@lwn.net ,我们一定会更正,并反馈给Ulrich的文档副本,别的读者就不会受到这…
原文链接:深入理解 Linux Cgroup 系列(二):玩转 CPU 上篇文章主要介绍了 cgroup 的一些基本概念,包括其在 CentOS 系统中的默认设置和控制工具,并以 CPU 为例阐述 cgroup 如何对资源进行控制.这篇文章将会通过具体的示例来演示如何通过 cgroup 来限制 CPU 的使用以及不同的 cgroup 设置对性能的影响. 1. 查看当前 cgroup 信息 有两种方法来查看系统的当前 cgroup 信息.第一种方法是通过 systemd-cgls 命令来查看,它会…
本篇文章给大家带来的内容是关于php为什么需要异步编程?php异步编程的详解(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 我对 php 异步的知识还比较混乱,写这篇是为了整理,可能有错. 传统的 php-fpm 一个进程执行一个请求,要达到多少并发,就要生成多少个进程.更糟糕的是每次请求都需要重新编译执行,导致并发一直上不来.因此出现了 Swoole 和 WorkerMan 两个国内流行的常驻内存框架[1].这两个框架原理都是通过事件循环,让程序一直停留在内存,等待…
C#编程总结(七)数据加密——附源码 概述 数据加密的基本过程就是对原来为明文的文件或数据按某种算法进行处理,使其成为不可读的一段代码,通常称为“密文”,使其只能在输入相应的密钥之后才能显示出本来内容,通过这样的途径来达到保护数据不被非法人窃取.阅读的目的. 该过程的逆过程为解密,即将该编码信息转化为其原来数据的过程.加密建立在对信息进行数学编码和解码的基础上.加密类型分为两种,对称加密与非对称加密,对称加密双方采用共同密钥.非对称加密,这种加密方式存在两个密钥,一个是公共密钥(对外公开),一种…
缘起:在老男孩进行linux培训shell编程教学中,发现不少水平不错的网友及同学对数组仍然很迷糊,下面就给大家分享下数组的用法小例子,希望能给大家一点帮助.其实SHELL的数组很简单,好用.我们学习都应该遵循简单.易用的原则. shell编程中数组的简单用法及示例 新版本的Bash支持一维数组. 数组元素可以使用符号variable[xx]等方式来初始化. 另外, 脚本可以使用declare -a variable语句来指定一个数组等.要引用一个数组元素(也就是取值), 可以使用大括号, 访问…
Leaf 是不是从来没有想过看看cpu运行曲线啊骚年?顶多也就仅仅是看看cpu利用率,吓自己一跳后感觉关闭几个不该打开的程序~ 然而问题来了,微软公司要让你绘制cpu运行曲线啊!!不仅是固定的直线,还要绝对值函数,还有正弦!!我的天这游戏还能玩? Require 写一个程序,让用户来决定Windows任务管理器(Task Manager)的CPU占用率.程序越简越好,计算机语言不限.例如,可以实现下面三种情况: CPU的占用率固定在50%,为一条直线 CPI的占用率为一条直线,但是具体占用率由命…
原文链接 http://www.cnblogs.com/jokerjason/p/9584402.html 先来一个整体图 一. 大致关系: CPU Cache --> 前端总线 FSB (下图中的Bus) --> Memory 内存 CPU 为了更快的执行代码.于是当从内存中读取数据时,并不是只读自己想要的部分.而是读取足够的字节来填入高速缓存行.根据不同的 CPU ,高速缓存行大小不同.如 X86 是 32BYTES ,而 ALPHA 是 64BYTES .并且始终在第 32 个字节或第…
CPU缓存架构 不同的CPU厂商的架构也有些不同,在这里只介绍流行的缓存架构 缓存一致性可以分为三个点: 在进程每个写入运算时都立刻采取措施保证资料一致性 每个独立的运算,假如它造成资料值的改变,所有进程都可以看到一致的改变结果 在每次运算之后,不同的进程可能会看到不同的值(这也就是没有一致性的行为) 缓存一致性协议有哪些: 缓存一致性协议有MSI,MESI,AMD Opteron:MOESI 协议,Synapse,Firefly及DragonProtocol等等 inter采用MESI协议.i…
今天开始看编程之美 .第一个问题是CPU的使用率控制,微软的问题果然高大上,我一看就傻了,啥也不知道.没追求直接看答案试了一下.发现自己电脑太好了,4核8线程,程序乱飘.加了一个进程绑定,可以控制一个CPU的占有率. 代码结果如下: #include"stdio.h" #include <Windows.h> void main() { //前三行可以不要 SYSTEM_INFO SystemInfo; GetSystemInfo(&SystemInfo); int…
一.Linux下查看CPU Cache级数,每级大小 dmesg | grep cache 实例结果如下: 二.查看Cache的关联方式 在 /sys/devices/system/cpu/中查看相应的文件夹 如查看cpu0 的一级缓存中的有多少组, $ cat /sys/devices/system/cpu/cpu0/cache/index0/number_of_sets$64 如查看cpu0的一级缓存中一组中的行数 $cat /sys/devices/system/cpu/cpu0/cach…
Linux可用下top.ps命令检查当前的cpu.mem用法.下面简单的例子: 一.采用ps查看资源消耗的过程 ps -aux 当您查看进程信息,第三列是CPU入住. [root@localhost utx86]# ps -aux | grep my_process Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.7/FAQ root   14415  3.4  0.9   37436  20328 …
近期在看编程之美,看到第一个问题时,一下子就被吸引了,原来在windows 的任务管理器中还能够让CPU舞动起来,再一次的相信了编程中仅仅有想不到没有做不到,对于书中的做法和网上的实现大致都同样.只是在看后面的解法之前,我的解法和书中第一种简单的控制之法同样,并且我还引入了一个实时监測CPU主频的函数.能够移植到其它的PC上. #include <windows.h> #include <iostream> using namespace std; int size = 0; in…
先贴程序: 以前看过这个算法, 不过没什么印象,大概记得它利用while循环来控制cpu利用率 #include int main(int argc,char*argv[]) {         while(1)         {                 int i=atoi(argv[1]);                 while(i--);                 usleep(atoi(argv[2]));         }         return 0; }…
一 cpu cache 1. cache的意义    为什么需要CPU cache?因为CPU的频率太快了,快到主存跟不上,这样在处理器时钟周期内,CPU常常需要等待主存,浪费资源.所以cache的出现,是为了缓解CPU和内存之间速度的不匹配问题(结构:cpu -> cache -> memory). CPU cache有什么意义?cache的容量远远小于主存,因此出现cache miss在所难免,既然cache不能包含CPU所需要的所有数据,那么cache的存在真的有意义吗?当然是有意义的—…
大家好,从本篇起,一口君将手把手教大家如何来学习Linux驱动,预计会有20篇关于驱动初级部分知识点.本专题会一直更新,有任何疑问,可以留言或者加我微信. 一.什么是模块化编程? Linux的开发者,遍布世界各地,他们相互之间觉大数估计都不认识.如果真的是对这些开发者进行统一管理,那是很难做到的.所以大牛们,在设计Linux内核的时候,融入了模块化的思想.也就是说,现在大家已经有一个现成的Linux操作系统了,所有的开发者写的代码对于这个Linux操作系统而言都是一个模块,开发者可以模块的形式将…
1.Xilinx在2012年推出了新一代的开发工具Vivado开发套件,目前的7系列FPGA既可以用以往的ISE或者XPS进行开发,也可以使用Vivado(为瓦度),而6系列等以前的产品智能使用ISE进行开发.下一代8系列产品,也就是2012年11月份Xilinx通告正在进行研发的下一代产品就只能在Vivado上进行开发了. 总的来说就是以后就不用ISE开发套件了,而那本由何宾教授撰写的<Xilinx All Programable>仍然是用ISE开发案例居多,包括制作IP核.所以说大家最好是…
socket编程socket这个词可以表示很多概念,在TCP/IP协议中“IP地址 + TCP或UDP端口号”唯一标识网络通讯中的一个进程,“IP + 端口号”就称为socket.在TCP协议中,建立连接的两个进程各自有一个socket来标识,那么两个socket组成的socket pair就唯一标识一个连接. 预备知识 网络字节序:内存中多字节数据相对于内存地址有大端小端之分,磁盘文件中的多字节数据相对于文件中的偏移地址也有大端小端之分.网络数据流同样有大端小端之分,所以发送主机通常将发送缓冲…
今天主要说的是一个开发者的思维和习惯问题. 思维包括编程的思维和解决一个具体问题的分析思维,分析思路,分析方法,甚至是分析工具. 无论是好习惯还是不好的习惯,都是在者一天一天的思维中形成的.那些不好的习惯,久了确实不好改.所以说,如果今天你认识到了,那么就从今天开始改,早改早受益,晚改痛苦一生. 先说一下今天的引子,那就是使用Python开发一个简单的Socket应用,就是一个client/server通信的小例子. 假设现在需要我们使用python开发一个socket的聊天应用,可能会遇到下面…
#include <stdio.h> int checkCPU() { union w{ int a; char b; }c; c.a = ; ); } int main() { printf("This CPU is %s\n", checkCPU() ? "little" : "big"); ; }…
点击此处进入网盘下载地址 提取码:o39n 全书共有20章,书中的简介如下: 本书旨在让你尽快学会 Python ,以便能够编写能正确运行的程序 —— 游戏.数据可视化和 Web 应用程序,同时掌握让你终身受益的基本编程知识.本书适合任何年龄的读者阅读,它不要求你有任何 Python 编程经验,甚至不要求你有编程经验.如果你想快速掌握基本的编程知识以便专注于开发感兴趣的项目,并想通过解决有意义的问题来检查你对新学概念的理解程度,那么本书就是为你编写的.本书还可供初中和高中教师用来通过开发项目向学…
写在前面 从上一篇博客高并发.低延迟之C#玩转CPU高速缓存(附示例)到现在又有几个月没写博客了,啥也不说,变得越来越懒了,懒惰产生了拖延后遗症. 最近一周升级了微服务项目使用的分布式日志组件Exceptionless到最新的版本,随着项目的不断迭代上线,我们总是想要第一时间知晓线上程序是否正常运行,特别是采用微服务架构的项目,不然心里总感觉有一块石头不知道啥时候落地.前期都是人工时不时地查看,其中有一次,异常都报了几个小时了,但是由于当时我正在专注地做另外的事情,直到线上出现服务不可用时才发现…
volatile的定义 Java语言规范第3版中对volatile的定义如下:Java编程语言允许线程访问共享变量,为了确保共享变量能被准确和一致地更新,线程应该确保通过排他锁单独获得这个变量.Java语言提供了volatile,在某些情况下比锁要更加方便.如果一个字段被声明成volatile,Java线程内存模型确保所有线程看到这个变量的值是一致的. 在多线程并发编程中synchronized和volatile都扮演着重要的角色,volatile是轻量级的synchronized,它在多处理器…
目录 并发编程三大特性 原子性 可见性 有序性 CPU缓存模型是什么 高速缓存为何出现? 缓存一致性问题 如何解决缓存不一致 JMM内存模型是什么 JMM的规定 Java对三大特性的保证 原子性 可见性 有序性 volatile解决的问题 volatile保证原子性吗?怎么解决? volatile的实现原理 volatile和synchronized的区别 volatile的使用条件 volatile与双重检查锁实现单例 参考 并发编程三大特性 原子性 一个操作或者多次操作,要么所有的操作全部都…
​前言: 文章内容:线程与进程.线程生命周期.线程中断.线程常见问题总结 本文章内容来源于笔者学习笔记,内容可能与相关书籍内容重合 偏向于知识核心总结,非零基础学习文章,可用于知识的体系建立,核心内容复习,如果帮助,十分荣幸 相关文献:并发编程实战.计算机原理 CPU多级缓存架构 要学习多级缓存架构,我们首先要了解一些计算机的小知识 CPU缓存行(CPU Cache Line): CPU缓存中可分配的最小存储单元,通常64字节,缓存行是分段的,一个段对应一块. CPU看到一条读取内存的指令时,会…