线程
1 | 状态:就绪 等待 运行 |
TCP
1 | 3次握手 最终目的使双方确认对方和自己的数据传输能力正常 |
1 | ack 确认顺序 |
subtitle
1 | 状态:就绪 等待 运行 |
1 | 3次握手 最终目的使双方确认对方和自己的数据传输能力正常 |
1 | ack 确认顺序 |
1 | brew install ruby #如果遇到找不到依赖包 需要更新下brew [update|upgrade] |
1 | travis login --pro #加上--pro travis login --auto会有报错 |
1 在本地生成公私钥,公钥部署在应用服务器,私钥放在项目构建目录下
2 travis 对私钥加密,加密解密串存储在travis服务器,构建运行过程中解密私钥用于远程连接
1 | travis encrypt-file deploy_rsa --add |
1 | language: generic #一定要指定语言,不然会报gemfile错误 |
如何快速生成大量的随机测试数据,比如10G的测试文件
单进程,实时写入
1000W => 100s
单进程 不写入只运行逻辑
1000W => 0.5s
单进程,output_buffering=4096
1000w=>63s
随机算法 未优化
|
缓存 写入时先写入缓存区
|
写入文件 刷新缓存
最后稳定的方法在
运行1亿的数据生产需要13s,写文件需要3s左右
40亿的数据采用单进程大概需要 15分钟(存储跑满了未实际执行,跑到18亿数据大概18G)
cpu 消耗在20-30左右
最终考虑方案
多进程+刷新缓存写文件
php yeild //本质上并不能减少cpu的计算 最多优化的点在于 在写文件的期间,cpu能继续计算随机值写到内存
int 32 8bit = 1byte 40x10^8x32(bit)-> /8x1000x1000x1000 = 16G
40个数 大概存储16G 一般给定的内存大小<8G
1 找出最大|最小的一个数
2 找出前K个最大最小的数
3 找出某个数是否存在
4 统计某个数的个数
5 统计最多的前n个数
$str=’Redis\0Cluster’ c语言 处理长度为5 redis处理为13
C语言中的字符串是根据特殊字符“\0”来判断该字符串是否结束
redis sds数据结构
{
len:13
buf: Redis\0Cluster\0
}
php会根据type的值来决定访问value的哪个成员,为字符串时,我们会访问红框标识的str结构,这便是底层字符串的存储结构,它有两个值,一个是指向字符串的指针val,另一个是记录字符串长度的len值,就是因为有len这个值,导致了php是二进制安全的:因为它不需要像C一样通过是否遇到’\0’结尾符来判断整个字符串是否读取完毕,而是通过len这个值指定的长度进行读取