goroutine系统调度

关于线程 我们每运行的一个程序都会创建一个进程,每个进程都有一个初始线程,而后初始线程可以创建更多线程,每个线程互相独立地运行。线程因为其轻量和易用性在并发编程中被大量的使用。而 goroutine 就是基于线程的。线程的实现模型主要有3种:用户级线程模型、内核级线程模型和两级线程模型(或者叫做混合型线程模型)。他们之间的区别就是用户线程和系统最小调度单元内核调度实体(KSE,Kernal Scheduling Entity)的对应关系不同。 用户级线程模型 用户线程与内核线程KSE是多对一的映射模型,多个用户线程一般都是从属于单个进程,并且用户线程的调度都是用户程序的线程库完成的,不需要操作

go
发布于 5年前

从零学习redis(4)--- 多机部署之主从复制

Redis 作为高效的缓存数据库,单机也能够表现出很好的性能。但是随着数据的增加、并发的增加,单机模式的 Redis 会受到单机性能、容量、稳定性的限制,即使 Redis 提供了稳定的持久化方案,但是单机服务器始终是部署在单个机器上,如果运行机器本身的服务器出现问题我们很难在短时间恢复服务。所以 Redis 提供了三种多机模式: 主从复制模式 哨兵模式 集群模式 主从复制模式 主从复制,让一台服务器去复制另外一台服务器,我们称被复制的服务器为主服务器,而对主服务器进行复制的服务器为从服务器。Redis 允许一台主服务器配置多个从服务器。主服务器可以进行读写操作,从服务器只能进行读操作,当主

redis
发布于 5年前

从零学习redis(3)--- AOF持久化

AOF 持久化是 Redis 提供的另外一种持久化方案,AOF 持久化是将发送到服务端的每一条命令记录下来,并且保存在硬盘的 AOF 文件中。AOF 默认是关闭的,可以通过修改 redis.conf 中相应的配置启动。 appendonly yes # 启动 AOF 持久化,默认是 no appendfilename "appendonly.aof" # AOF 文件文件名 文件同步策略 文件的写入默认情况下会先写入系统的缓存中,系统每隔30秒同步一次,才是真正的写入磁盘,如果这30秒服务器宕机那数据也会丢失。 Redis 可以通过 redis.conf 中的配置设置同步策略 # app

redis
发布于 5年前

从零学习redis(2)--- RDB持久化

RDB 是 Redis 的一个持久化方案,也是 Redis 默认的持久化方案。RDB 持久化可以手动执行也可以根据服务器配置定期执行。 RDB 持久化所生成的 RDB 文件是一个经过压缩的二进制文件,使用该文件可以还原生成 RDB 文件时的数据库状态。RDB 保存在硬盘上,所以即使 Redis 服务器退出甚至运行 Redis 的服务器停机,但只要 RDB 文件还在就不影响数据的恢复。 RDB文件创建和载入 有两个 Redis 命令可以用于生成 RDB 文件,一个是 SAVE ,另一个是BGSAVE。 SAVE命令会阻塞 Redis 服务器进程,直到 RDB 文件创建完毕为止,在这期间服务器不能

redis
发布于 5年前

从零学习redis(1)--- 持久化

Redis提供多种不同级别的持久化方案: RDB持久化可以在指定的时间间隔内生成数据集的时间点快照 AOF持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集。AOF文件的命令全部以Redis协议的格式来保存,新命令会被追加到文件的末尾。Redis还可以在后台多AOF文件进行重写,使得AOF文件的体积不会超出保存数据集状态所需的实际大小。 Redis还可以同时使用AOF持久化和RDB持久化。在这种情况下,当Redis重启时,它会优先使用AOF文件来还原数据集,因为AOF文件保存的数据一般要比RDB文件所保存的数据要更完整。 我们也可以关闭持久化功能,让数据

redis
发布于 5年前

centos7 php72 phalcon环境安装

1.配置软件源 yum install epel-release rpm -ivh https://rpms.remirepo.net/enterprise/remi-release-7.rpm rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-remi 2.启用remi源 /etc/yum.repos.d/remi.repo,在[remi]下边的enabled=0改为enabled=1 3.修改/etc/yum.repos.d/remi-php72.repo enabled=1即可。 4.安装php72 phalcon nginx及相关扩展 yum inst

PHP
发布于 5年前

从零学习redis(0)--- 初识

Redis 全称是 Remote Dictionary Server,是一个使用C编写的开源、支持网络、基于内存、可选持久化的键值对存储系统。可以别用作数据库、缓存和消息中间件。 Redis支持的数据结构及基本命令展示 这里只是展示最基本的操作,更多内容请参考redis文档 string string类型是redis支持的最基本的数据类型,string类型的值可以是任何类型的字符串(包括二进制数据),例如你可以在一个建里保存一张jpeg图片。值的长度最大不能超过512MB。 set命令基本展示 127.0.0.1:6379> SET hello world // 设置一个值 OK 127

redis
发布于 5年前

[转]Golang中JSON使用小技巧

临时忽略掉struct中空字段 type User struct { Email string `json:"email"` Password string `json:"password"` } 当我们把用户信息返回给前端的时候显然需要忽略调Password 字段,则可以这样做: json.Marshal(struct{ *User Password bool `json:"password,omitempty"` }{ User:user, }) 临时添加额外字段 type User struct { Email string `json:"

go
发布于 5年前

git同时push代码到github、码云等多个平台

前提 我们一般为代码添加远程仓库一般是: git remote add <name> <url> 比如以我的一个代码库为例: git remote add origin git@github.com:yushuailiu/go-algorithm.git 这样我们就可以向github提交代码了。但是有时候我们可能想要把代码同时提交到gitee上,那么我们可以像上面一样添加一个新的仓库 git remote add gitee git@gitee.com:liuyushuai/go-algorithm.git 然后如果我们有代码更新我们需要同时更新origin和gitee

工具
发布于 5年前

创建最小的运行Go程序的Image

我们首先编写一个简单的Golang服务 package main import "net/http" func main() { http.HandleFunc("/", hello) http.ListenAndServe(":8001", nil) } func hello(w http.ResponseWriter, r *http.Request) { w.Write([]byte("Hello world!")) } 运行服务 $ go run main.go 访问 http://127.0.0.1:8001 页面返回 Hello world! 构建运

go
发布于 5年前