RELATEED CONSULTING
相关咨询
选择下列产品马上在线沟通
服务时间:8:30-17:00
你可能遇到了下面的问题
关闭右侧工具栏

新闻中心

这里有您想知道的互联网营销解决方案
go语言fastdfs Go语言学多久可以工作

go-fasthds 形成缩略图快吗

行成缩略图快,

网站建设哪家好,找成都创新互联!专注于网页设计、网站建设、微信开发、小程序开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了临清免费建站欢迎大家使用!

go-fastdfs是一个基于http协议的分布式文件系统,它基于大道至简的设计理念,

一切从简设计,使得它的运维及扩展变得更加简单

Go 语言三色标记扫描对象是 DFS 还是 BFS?

最近在看左神新书 《Go 语言设计与实现》的垃圾收集器时产生一个疑惑,花了点时间搞清楚了记录一下。

Go 语言垃圾回收的实现使用了标记清除算法,将对象的状态抽象成黑色(活跃对象)、灰色(活跃对象中间状态)、白色(潜在垃圾对象也是所有对象的默认状态)三种,注意没有具体的字段标记颜色。

整个标记过程就是把白色对象标黑的过程:

1.首先将 ROOT 根对象(包括全局变量、goroutine 栈上的对象等)放入到灰色集合

2.选一个灰色对象,标成黑色,将所有可达的子对象放入到灰色集合

3.重复2的步骤,直到灰色集合中为空

下图是书上的插图,看上去是一个典型的深度优先搜索的算法。

下图是刘丹冰写的《Golang 修养之路》的插图,看上去是一个典型的广度优先搜索的算法。

我疑惑的点在于这个标记过程是深度优先算法还是广度优先算法,因为很多文章博客对此都没有很清楚的说明,作为学习者这种细节其实也不影响对整个 GC 流程的理解,但是这种细节我非常喜欢扣:)

对着书和源码摸索着大致找到了一个结果是深度优先。下面看下大致的过程,源码基于1.15.2版本:

gcStart 是 Go 语言三种条件触发 GC 的共同入口

启动后台标记任务

为每个处理器创建用于执行后台标记任务的 Goroutine

上面休眠的 G 会在调度循环中检查并唤醒执行

执行标记

gcw 是每个 P 独有的所以不用担心并发的问题 和 GMP、mcache 一样设计,减少锁竞争

尝试在全局列表中获取一个不为空的 buf

这是官方实现的无锁队列:)涨见识了,for 循环加原子操作实现栈的 pop

到这里从灰色集合中获取待扫描的对象逻辑说完了。找到对象了接着就是 scanobject(b, gcw) 了,里面有两段逻辑要注意

根据索引位置找到对象进行标色

尝试存入 gcwork 的缓存中,或全局队列中

无锁队列,for 循环加原子操作实现栈的 push

到这里把灰色对象标黑就完成了,又放回灰色集合接着扫下一个指针。

Go 语言设计与实现 垃圾收集器

Golang三色标记+混合写屏障GC模式全分析

go-fastdfs安装

go-fastdfs 最简单、可靠、高效的分布式文件系统

官方文档

docker go-fastdfs安装

修改容器里面的fastdfs配置有2种方法

如果想通过curl访问fastdfs的话,需要在cfg.json里面你添加白名单。使用localhost或127.0.0.1是不行的

添加172.17.0.1,这是docker的默认地址。

示例

这个api可以查看fastdfs的文件存储信息。

/group1/stat的group1是分组的名称,因为默认配置是分组存储的,如果不想分组,就修改cfg.json的配置

不分组的话,api命令不需要groupx

修改完配置后,需要reload fastdfs

这里的restart只会重启容器里面的fastdfs进程

api的方法修改配置不是很友善,不建议使用。因为只修改单个配置项的话,其他的值会变空

api接口: /reload

/reload接口可以获取cfg配置信息、修改配置、reload配置

更多的API: go-fastdfs Api文档

浏览器输入: , 可以打开go-fastdfs的上传文件页面

bmob后台是什么技术

从程序语言角度说,Bmob的后端使用了java+golang(处理接口)、python(统计)、node(云端代码)、shell(运维)。

从数据库底层角度说,Bmob的后端使用了mysql(元数据)、mongodb(数据)、fastdfs(小文件)、hadoop(大文件和日志数据)。

从缓存角度说,Bmob的后端主要使用了redis。

从运维角度说,Bmob的后端使用了docker作为虚拟机容器。

为什么GO语言把类型放在前面?

当需要定义一个整形变量a 心里是这样想的:我现在需要一个整形的变量,我要定义它,于是我先写一个int,再思考它的名字 a ,于是就这么写出来了int a  。而不是我写了个变量a,我得给它区分个类型int。2. 在调用一个方法的时候,func(abdfsasdffdg int, bagressdgf string, csdgesredg bool)    那个go函数看的很乱,程序员其实根本就不怎么看参数名字是什么,而只是看需要传入什么类型,注意力只在于int,string,bool这三个,如果如上那么写,反而影响了视线,乱系八糟的。func(int adsfasdfsdaf, string asdfasfasf, bool gwegasgs),这么写我只注意类型,就不受名称影响了。3. IDE自动提示    go本身就是为快而生,定义一个结构变量Rectangle rectangle,当键盘敲下r时候,IDE会自动给出rectangle,直接回车就出来了,反过来就的自己一个字母一个字母敲上去,蛋疼啊4. 至于go给出的解释,当遇到复杂函数时……    一个项目中能写几个复杂函数,为了去解决这么一点小问题就把优势给牺牲了.


当前标题:go语言fastdfs Go语言学多久可以工作
当前网址:http://scyingshan.cn/article/docdsss.html