
获得徽章 9
- #每天一个知识点#
父子进程学习
今日小坑 父子进程Kill
go语言中通过exec.Command() 执行了子进程,可以通过Kill 关闭该进程但是,如果该子进程Fork了新的子进程就无法关闭孙子进程,Process.wait()依然会进行Wait
孙进程会变成孤儿进程被init或systemd收养,但是不会停止,这点需要注意
进程状态(S)
R:运行 Runnable (on run queue) 正在运行或在运行队列中等待
S:睡眠 Sleeping 休眠中,受阻,在等待某个条件的形成或接受到信号
I:空闲 Idle
Z:僵死 Zombie(a defunct process) 进程已终止,但进程描述符存在, 直到父进程调用wait4()系统调用后释放
D:不可中断 Uninterruptible sleep (ususally IO) 收到信号不唤醒和不可运行, 进程必须等待直到有中断发生
T:终止 Terminate 进程收到SIGSTOP、SIGSTP、 SIGTIN、SIGTOU信号后停止运行运行
P:等待交换页
W:无驻留页 has no resident pages 没有足够的记忆体分页可分配
X:死掉的进程展开评论点赞 - #每天一个知识点#
2023-08-23
打卡Day43
缓存设计确实挺重要的,但是没有详细的学习过,对于数据一致性的要求还是挺高的,有机会系统的学习一下。
今天还是学习一些Redis的Subscribe Publish 命令吧
subscribe channel [channel ...] 订阅一个或多个频道
unsubscribe channel 退订指定频道
publish channel message 发送消息
psubscribe pattern 订阅指定模式
punsubscribe pattern 退订指定模式展开评论点赞 - #每天一个知识点#
2023-08-21
打卡Day42
好多天都没有打卡,继续打卡学习,今日学习内容
Redis的Lua 脚本,Lua脚本在好多场景下都有使用,像是Nginx下也可以配合使用
Redis的指令很丰富,但是某些特定领域,需要扩充若干指令原子性执行时,仅使用原生命令便无法完成。
Redis 为这样的用户场景提供了 lua 脚本支持,用户可以向服务器发送 lua 脚本来执行自定义动作,获取脚本的响应数据。Redis 服务器会单线程原子性执行 lua 脚本,保证 lua 脚本在处理的过程中不会被任意其它请求打断展开评论点赞 - #挑战每日一条沸点#
2023-08-16
打卡Day40
啊啊啊,又是划水的一天,代码也没写多少,麻了,
明天的学习目标是计算机网络相关知识,ヾ(≧▽≦*)o评论点赞 - #挑战每日一条沸点#
2023-08-16
打卡Day40
今天没干啥,但是还是意识到对基础的学习还是非常重要,包括数据库,计算机网络,计算机操作系统,这些重要的基础知识,只有更好的了解这些才能对代码背后的逻辑有更深的理解展开评论点赞 - #每天一个知识点#
2023-08-14
打卡Day39
昨天忘记复盘了,今天补回来。
存储系统与数据库
从一个开发者的角度来看,存储系统无非是提供读写,控制,安全相关和数据持久化的系统
存储系统有性能敏感的特点,存储系统可以说是计算机的基石之一,性能必然不能太低下。
不同操作系统有着不同的存储系统如NTFS,rootfs,Ext2,Ext3,Ext4等
在此基础上发展出集合系统,数据库
数据库中有一类非常重要的模型,关系模型
可以简述为 :任意元素组成的若干有序偶对
对数据库的操作也发展出对应的DSL - SQL
结构化查询语言,支持复杂的查询,数据库也支持了事务
谈到事务,就不得不说到其特点也可以作为定义--> ACID
原子性 一致性 隔离性 持久性
对于单机数据库就需要很多特点需要去记忆与深入学习 分布式存储系统和分布式数据库就更复杂了
非关系数据库就简单举市面上比较常用的吧
Redis MongoDb ES
他们的特性又五花八门 后续再去深入学习了 (菜是原罪展开评论点赞 - #每天一个知识点#
2023-08-13
打卡Day38
LGP 轻量级日志收集可视化平台
promtail: 日志采集组件,通过配置scrape_configs
采集对应的本地文件,journal日志,使用positions
管理采集偏移量等,在通过http的方式,推送到远方的存储中
loki: 核心日志存储,查询组件,可以拆分为 querier,ingester, distributor 等多个组件,也可以部署为一个进程,数据存储可以落地为S3的文件中
grafana: 数据查询模块,可以使用LogQL 查询展开评论点赞 - #每天一个知识点#
2023-08-11
打卡Day37
项目构建与部署
基于Docker-compose 便于迁移与环境执行
context 上下文路径,可以是文件路径
dockerfile 指定构建镜像的 Dockerfile 文件名
args 构建参数,只能在构建过程中访问的环境变量
network 设置网络容器连接,none 表示在构建期间禁用网络
target 多阶段构建,可以指定构建哪一层
Docker-compose 内容较多明天继续深入学习展开评论点赞 - #每天一个知识点#
2023-08-10
打卡Day36
不使用多阶段构建时,我们通常会创建两dockerfile文件,一个用于开发及编译应用,另一个用于构建精简的生产镜像。 这样能比较大限度的减小生产镜像的大小
Docker 的多阶段构建
默认情况下构建阶段没有名称,我们可以通过整数0~N来引用,即第一个from从0开始。其实我们还可以在FROM指令中添加AS <NAME> 来命名构建阶段,接着在COPY指令中通过<NAME>引用。我们对上面dockerfile修改如下
FROM openjdk:11 as builder
COPY * /app
RUN mvn package
#阶段2
FROM openjdk:11
WORKDIR /server
#通过名称引用
COPY --from=builder /app ./
CMD ["java","-jar","app.jar"]展开评论点赞