C++内存对齐
字节对齐:计算机中内存大小的基本单位是字节(byte),理论上讲,可以从任意地址访问某种基本数据类型,但实际的计算机系统对基本类型数据在内存中存放的位置有限制,即它的地址必须是2、4、8、16等倍数,则就要求各种数据类型按照一定的规则在空间上排序,这就是对齐。
字节对齐:计算机中内存大小的基本单位是字节(byte),理论上讲,可以从任意地址访问某种基本数据类型,但实际的计算机系统对基本类型数据在内存中存放的位置有限制,即它的地址必须是2、4、8、16等倍数,则就要求各种数据类型按照一定的规则在空间上排序,这就是对齐。
最近阅读《Unix网络编程卷1:套接字联网API》、《Linux内核完全注释》一书,阅读涉及到其中的I/O,弄清楚三个I/O复用函数select、poll、epoll的区别,也将涉及到的用户态or内核态、文件描述符fd、上下文切换,so 把知识点做一次总结记录。
最近入手一个树莓派4b板子,初衷是装个centos系统想拿来当个人开发机使用,偶尔业余写一些C++代码,在自己黑苹果编译有些库还不一样,之前遇到过一个用epoll。4G内存然后针对其它应用则直接用docker部署,简单还方便一点。但是遇到一个问题,每次重启一次系统,docker启动都是特别的慢(5-6分钟)。
通过systemctl status docker
命令查看状态是启动中,再仔细看了一下发现有一行。
12月 22 13:54:53 localhost dockerd[609]: crypto/rand: blocked for 60 seconds waiting to read random data from the kernel
# 大概意思是:等待60秒从内核中获取随机数。
一开始自己猜测会不会是CPU性能问题导致,后面查了一下,前辈也有遇到logstash启动缓慢的问题,也同样说等待60秒从内核中获取随机数。从那篇博文中了解到一个关于熵的知识点。
最近遇到一个将线上的redis数据同步到本地开发环境,想着直接用Python小脚本的方式直接同步就好了。线上是zadd有序集合的数据,习惯性的将平时在shell交互环境方式写。(如下)
# shell交互方式zadd数据
ZADD key score member
# 本次在Python脚本方式写的(错误情况)
online = redis.Redis(host="ip", port="端口")
local = redis.Redis(host="ip", port="端口")
local_pip = local.pipeline()
local_pip.zadd(key, score, member) // 错误示范
最近买用国外的服务跑一些离线脚本,但是遇到很蛋疼的事,日志时间没有对上。
# 通过该命令可以查看当前时间。
date -R
博主的小机机是UTC时间相对比北京时间CST相差8的小时,一些业务是的日志就很麻烦。