smallnest
smallnest
我觉得你说的有道理。 我应该把这个例子再设置复杂一点,不使用基本数据类型uint32,而是使用一个复杂的对象。 本意是测试java单例相同的问题:即使字段被赋值了,其他的goroutine也可能得到一个未完全初始化的对象 > @zeast > > @smallnest > > 你的理解是对的,通过对第13行,第19行使用atomic,可以给它们之间建立一个happen before的关系,保证写对读可见,否则也可以把第13行放在Lock的临界区中,但是性能就不保证了。 > > > > Go的内存模型就是定义happen before,保证某一个时刻的w,确保r能读取到。 > > > > > > > > > @PureWhiteWu > >...
是的,避免误导,答案C我修改了。 目前看来第四题可能存在几个问题: 1. 非原子操作,在某些架构下是有问题的 2. 先于f执行标志设置 3. 有可能一个goroutine看到字段已经被赋值,但是它的值还没有初始化: https://groups.google.com/forum/#!topic/golang-nuts/816FGr-mTUs 代码库中也修改了一下,使用复杂的struct代替基本数据类型int > @PureWhiteWu > https://groups.google.com/forum/?utm_medium=email&utm_source=footer#!msg/golang-nuts/6HlK0Lz2O5Y > 结论是,第四题中虽然没有正确实现单例,但是f也最多只能运行一次,而不会运行多次。
> 完全可以使用chan来解决啊,还更简单 > > ```go > func main() { > var ( > completed = 0 > counter = make(chan struct{}, 16) > ) > > // 启动多个任务,每个任务模拟不同耗时,然后递减未完成任务数量 > for...
> > Linux 2.6.33之前目的文件描述符必须是文件,以后的版本就没有限制了,可以是任意的文件。 > > 查了下2.6.33之前目的文件描述符必须是socket > > > In Linux kernels before 2.6.33, out_fd must refer to a socket. Since Linux 2.6.33 it can be any file. If...
> maxSendfileSize 依照Go team的测试,貌似更大的size并没有带来性能的提升。 你可以阅读下面的连接看看他们的讨论 https://go-review.googlesource.com/c/go/+/425878
> 京东好像还没上架 估计下个月了
@AnAnonymousFriend 包含极客时间的内容并做了更新,至少包括30%的内容,比如并发模式、解题实战、限流等等
> 大概啥时候发布 大概9月份
本次测试可能会有一些问题和场景覆盖不到的地方,欢迎批评指正,如 https://github.com/rpcxio/rpcx-benchmark/issues/13
如果你在你的产品中用起来满足需求,就没问题,因为追求性能也不是每一个场景都需要的。 还有点点,最后的Range方法还不完美,因为k,v的类型是any