golang

平滑重启

限制并发量

源码 今天调试了一下golang编译工具,发现了一个很有"奇怪"的地方 简化问题 假设有1000个任务,1000个并发协程,设置n(cpu核数)个物理处理器(task)并发完成,每个协程只要完成了当前任务采取完成下一个 代码 原始代码,go作者无所畏惧的使用协程 func parseFiles(filenames []string) uint { var noders []*noder // Limit the number of simultaneously open files. sem := make(chan struct{}, runtime.GOMAXPROCS(0)+10) for _, filename := range filenames { go func(filename string)

By chainhelen

go

snowflake

分布式Id snowflake 是一种分布式id唯一算法,相比较uuid算法生成方式,snowflake生成的是一个int64大整型,并且是大致递增 我发现网上对于该算法的描述,在位数偏移上是由差异的,但是整体思路是一致的 这里的10-bit workerId在有的源码里面是分成两个 workerId 、data的5-bit大小 可以大致算一下,1毫秒1单点能生成2 ^ 12 = 4096个id,总共能部署 2 ^ 10 = 1024 个节点,也就是1毫秒最大能生成400多万个id 我按照算法思路写了如下代码 package main import ( "errors" "fmt" "sync" "time" ) var ( // 1288834974657 是 (Thu, 04 Nov 2010 01:42:

By chainhelen

golang

mysql数据一致性闲谈

外部连接 首先让mysql在远程服务器上,现在希望它能被外部ip访问 在/etc/my.cnf里面,找到bind-address修改为0.0.0.0, //重启mysql service mysql restart //查看mysql服务 netstat -anp | grep mysqld 看到如下监听端口已经是0.0.0.0 但是发现外部ip还是访问不了远程的mysql 现在远程服务器上用mysql-client连上 //root 是用户名 mysql -u root -p //mysql本身的数据库 use mysql //创建 create user 'mysqlremoteusername'@'0.0.0.0' identified

By chainhelen