IdiotSky


  • Home

  • Categories

  • About

  • Archives

  • Tags

  • Books

  • Search

c++笔记

Posted on 24 Dec 18 | In c++

学了c,还是要学下c++

引用和指针的区别

C++primer中对 对象的定义:对象是指一块能存储数据并具有某种类型的内存空间

一个对象a,它有值和地址&a,运行程序时,计算机会为该对象分配存储空间,来存储该对象的值,我们通过该对象的地址,来访问存储空间中的值

指针p也是对象,它同样有地址&p和存储的值p,只不过,p存储的数据类型是数据的地址。如果我们要以p中存储的数据为地址,来访问对象的值,则要在p前加解引用操作符”*“,即*p。

Read more »

linux内存寻址

Posted on 07 Dec 18 | In linux

《深入理解LINUX内核》第二章就难到飞起,这篇文章很好的解释了些知识,mark之👿

概念

物理地址(physical address)

用于内存芯片级的单元寻址,与处理器和CPU连接的地址总线相对应。
——这个概念应该是这几个概念中最好理解的一个,但是值得一提的是,虽然可以直接把物理地址理解成插在机器上那根内存本身,把内存看成一个从0字节一直到最大空量逐字节的编号的大数组,然后把这个数组叫做物理地址,但是事实上,这只是一个硬件提供给软件的抽像,内存的寻址方式并不是这样。所以,说它是“与地址总线相对应”,是更贴切一些,不过抛开对物理内存寻址方式的考虑,直接把物理地址与物理的内存一一对应,也是可以接受的。也许错误的理解更利于形而上的抽像。

虚拟内存(virtual memory)
这是对整个内存(不要与机器上插那条对上号)的抽像描述。它是相对于物理内存来讲的,可以直接理解成“不直实的”,“假的”内存,例如,一个0x08000000内存地址,它并不对就物理地址上那个大数组中0x08000000 - 1那个地址元素;
之所以是这样,是因为现代操作系统都提供了一种内存管理的抽像,即虚拟内存(virtual memory)。进程使用虚拟内存中的地址,由操作系统协助相关硬件,把它“转换”成真正的物理地址。这个“转换”,是所有问题讨论的关键。
有了这样的抽像,一个程序,就可以使用比真实物理地址大得多的地址空间。(拆东墙,补西墙,银行也是这样子做的),甚至多个进程可以使用相同的地址。不奇怪,因为转换后的物理地址并非相同的。
——可以把连接后的程序反编译看一下,发现连接器已经为程序分配了一个地址,例如,要调用某个函数A,代码不是call A,而是call 0x0811111111 ,也就是说,函数A的地址已经被定下来了。没有这样的“转换”,没有虚拟地址的概念,这样做是根本行不通的。

Read more »

Go init函数详解

Posted on 05 Dec 18 | In go

go 一天不用就忘了这个,mark一个以防万一👿

init()函数会在每个包完成初始化后自动执行,并且执行优先级比main函数高。init 函数通常被用来:

  • 对变量进行初始化
  • 检查/修复程序的状态
  • 注册
  • 运行一次计算
Read more »

深入Linux proc文件系统

Posted on 28 Nov 18 | In linux

继续深入学习Linux👿

在Linux上,proc是一个伪文件系统,提供了访问内核数据的方法,一般挂载在“/proc”目录,其中的大部分内容是只读的,挂载(mount)信息可能为:

1
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)

下面列举“/proc”文件系统下的文件和目录。

pid目录

/proc/[pid]目录,pid为进程的数字ID,是个数值,每个运行着的进程都有这么一个目录。

cmdline

/proc/[pid]/cmdline是一个只读文件,包含进程的完整命令行信息。如果这个进程是zombie进程,则这个文件没有任何内容。举例如下:

1
2
3
4
5
# ps -ef | grep 2948
root 2948 1 0 Nov05 ? 00:00:04 /usr/sbin/libvirtd --listen

# cat /proc/2948/cmdline
/usr/sbin/libvirtd--listen
Read more »

说说c的volatile

Posted on 27 Nov 18 | In c

volatile 介绍

表示一个变量也许会被后台程序改变,关键字 volatile 是与 const 绝对对立的。它指示一个变量也许会被某种方式修改,这种方式按照正常程序流程分析是无法预知的(例如,一个变量也许会被一个中断服务程序所修改)。

变量如果加了 volatile 修饰,则会从内存重新装载内容,而不是直接从寄存器拷贝内容。

Read more »

使用iostat分析IO性能

Posted on 25 Nov 18 | In linux命令

iostat用于输出CPU和磁盘I/O相关的统计信息.👿

不加选项执行iostat

单独执行iostat,显示的结果为从系统开机到当前执行时刻的统计信息。

1
2
3
4
5
6
7
8
9
$ iostat
Linux 2.6.32-279.19.3.el6.ucloud.x86_64 (vm1) 06/11/2017 _x86_64_ (8 CPU)

avg-cpu: %user %nice %system %iowait %steal %idle
0.08 0.00 0.06 0.00 0.00 99.86

Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
vda 0.45 0.29 8.10 6634946 183036680
vdb 0.12 3.11 30.55 70342034 689955328
Read more »

硬盘基本知识

Posted on 23 Nov 18 | In linux

mark吧,没什么可写了👿

盘片 片面 和 磁头

硬盘中一般会有多个盘片组成,每个盘片包含两个面,每个盘面都对应地有一个读/写磁头。受到硬盘整体体积和生产成本的限制,盘片数量都受到限制,一般都在5片以内。盘片的编号自下向上从0开始,如最下边的盘片有0面和1面,再上一个盘片就编号为2面和3面。

如下图:

Read more »

熔断器概念

Posted on 06 Nov 18 | In 高可用

前言

分布式系统中经常会出现某个基础服务不可用造成整个系统不可用的情况, 这种现象被称为服务雪崩效应. 为了应对服务雪崩, 一种常见的做法是手动服务降级. 而Hystrix的出现,给我们提供了另一种选择.

服务雪崩效应的定义

服务雪崩效应是一种因 服务提供者 的不可用导致 服务调用者 的不可用,并将不可用 逐渐放大 的过程.如果所示:

上图中, A为服务提供者, B为A的服务调用者, C和D是B的服务调用者. 当A的不可用,引起B的不可用,并将不可用逐渐放大C和D时, 服务雪崩就形成了.

Read more »

docker总结

Posted on 24 Oct 18 | In docker

不想分几章了,所以很长很长👿

docker 容器的状态机

一个容器在某个时刻可能处于以下几种状态之一:

  • created:已经被创建 (使用 docker ps -a 命令可以列出)但是还没有被启动 (使用 docker ps 命令还无法列出)
  • running:运行中
  • paused:容器的进程被暂停了
  • restarting:容器的进程正在重启过程中
  • exited:上图中的 stopped 状态,表示容器之前运行过但是现在处于停止状态(要区别于 created 状态,它是指一个新创出的尚未运行过的容器)。可以通过 start 命令使其重新进入 running 状态
  • destroyed:容器被删除了,再也不存在了
Read more »

TCMalloc:Thread-Caching(线程缓存)Malloc

Posted on 17 Sep 18 | In c

动机

TCMalloc比glibc 2.3 malloc(作为一个名为ptmalloc2的独立库提供)和我测试的其他malloc更快。ptmalloc2在2.8 GHz P4上执行malloc/free操作对(对于小对象)需要大约300纳秒。对于相同的操作对,TCMalloc实现大约需要50纳秒。速度对于malloc实现很重要,因为如果malloc不够快,应用程序编写者倾向于在malloc之上编写自己的自定义空闲列表。这可能导致额外的复杂性和更多的内存使用,除非应用程序编写者非常小心地适当调整空闲列表的大小并从空闲列表中清除空闲对象

TCMalloc还减少了多线程程序的锁争用。对于小型对象,几乎没有争用。对于大型对象,TCMalloc尝试使用细粒度和高效的自旋锁。ptmalloc2还通过使用每线程arena来减少锁争用,但是ptmalloc2使用每线程arena存在很大问题。在ptmalloc2中,内存永远不会从一个arena转移到另一个arena。这可能导致大量浪费的空间。例如,在一个Google应用程序中,第一阶段将为其数据结构分配大约300MB的内存。当第一阶段结束时,第二阶段将在同一地址空间中开始。如果第二阶段被指定为与第一阶段使用的arena不同的arena,此阶段不会重用第一阶段之后剩余的任何内存,并会向地址空间添加另外300MB。在其他应用中也注意到类似的内存爆炸问题。

Read more »
12…17
ejunjsh

ejunjsh

code freak

164 posts
25 categories
154 tags
RSS
GitHub Weibo Email FB Page
0%
© 2014 — 2019 ejunjsh
Powered by Hexo
|
Theme — NexT.Gemini