V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  hez2010  ›  全部回复第 6 页 / 共 29 页
回复总数  580
1 ... 2  3  4  5  6  7  8  9  10  11 ... 29  
218 天前
回复了 afxcn 创建的主题 Go 编程语言 golang 的 defer 真是个好设计
@CEBBCAT spec 里这么写了那也就是说设计如此,尽管这样也一样会导致开发者对于资源释放场景不得不写出多余的代码来让代码正确工作。

假设现在设计个锁,用 defer 来释放锁:

for ...
AcquireLock()
defer ExitLock()
// do something
result = ...

本应简简单单就搞定的东西,你也不得不写成:

for ...
result := func() {
AcquireLock()
defer ExitLock()
// do something
return ...
}()
// use result

于是但凡要用 defer 的时候都要想一下 scope 对不对,做 go 的代码生成的时候还得防御性的把但凡需要 defer 的地方都塞到一个匿名函数里来用,然后通过匿名函数的返回值来向外传递那一小块儿代码的执行结果(参考 https://v2ex.com/t/1036033 的 tryErr 部分的 codegen )。

上面这还只是个简单的例子,如果你在 AcquireLock 和 ExitLock 之间用到了大量来自当前 block 之外的变量的话,在匿名函数里使用那些变量还会导致编译器需要捕获变量到闭包从而发生大量的拷贝。“只用两行”只是写代码时最简单情况的假象,而编译器要为了这两行做大量的工作包括不限于插入更多的控制流、捕获变量到闭包等等,这又是一个隐藏的性能陷阱。

这种情况只能说,要么是 defer 被我滥用了所以 defer 不适合用来做通用的资源释放;要么这是语言设计有问题留给用户来做 workaround 。
218 天前
回复了 afxcn 创建的主题 Go 编程语言 golang 的 defer 真是个好设计
那你是没有遇到 go 的 defer 在作用域上的坑,比如这段代码:
package main

import "fmt"

func main() {
for i := 0; i < 5; i++ {
defer foo()
fmt.Println(i)
}
}

func foo() {
fmt.Println("foo")
}
会输出
0 1 2 3 4 foo foo foo foo foo ,而不是 0 foo 1 foo 2 foo 3 foo 4 foo

而别的语言的无论是 RAII 还是 try-finally 还是 using ,作用域都是显然的,会在当前 scope 结束的时候被调用。
这也就导致你没法直接用 go 的 defer 来做退出锁之类的操作,因为全都被 go 给你放到函数最后去了。
219 天前
回复了 albert0yyyy 创建的主题 Windows windows 深夜自动重启,还在编译东西呢😭
你只需要在组策略里把自动更新改成只下载不自动安装就行了。
这样既可以不关更新还能控制什么时候安装。
220 天前
回复了 keakon 创建的主题 Redis Garnet 真比 Redis 快吗?
@wxf666 我测的单线程是 1 client 1 thread 1 concurrency 1 pipeline 的。
其实分布式锁并不一定非得 lua 才能实现,我目前是把自己项目的 redis 换成了 garnet ,单纯就是把 redis pod 下掉然后换成 garnet ,其他啥也没动,一切正常。
虽然不知道 jetbrains 软件的运行的情况(毕竟我不用 jb 全家桶),我 M1 Pro 的 macOS 更新到 14.4.1 之后连 dock 和桌面都会随机卡死,尤其是从 launchpad 启动个软件的时候直接 dock 和桌面失去响应。
220 天前
回复了 keakon 创建的主题 Redis Garnet 真比 Redis 快吗?
@sujin190 单线程的测试设置了 pipeline=1 ,意味着一次请求返回之后才会进行下一次请求。而多线程的 pipeline 设置的 1024 ,能够充分利用计算机资源。
221 天前
回复了 keakon 创建的主题 Redis Garnet 真比 Redis 快吗?
我也跑过,用的 mentier_benchmark ,同样是 redis 自己出品的 benchmark 工具。

单线程:

![single]( https://i.imgur.com/XHBOB19.png)

多线程:

![multi]( https://i.imgur.com/1SX6KE2.png)

无论单线程还是多线程 garnet 都比 redis 更快。
你在公司里工作时间内所有的产出都属于公司。
手持日行 S23 ,用系统自带的睡眠功能把微信 QQ 以及国内那一大堆支付购物和短视频软件的后台活动限制掉,充一次电能用一天半到两天。如果不限制那些 app 的后台,不到 8 个小时就没电了。
227 天前
回复了 adfs 创建的主题 Kubernetes 你们生产环境 k8s 的版本是多少
1.24 还是太旧了,我这里用 1.29 。
k8s 经常会有 API 响应的破坏性变更,如果你用的版本太老了会导致一大堆操作 k8s 相关的库失效,因为他们没法解析新版本 k8s api 的响应里的 json 。
卸载掉所有的 explorer 第三方插件再看看。
这些插件的原理都是直接用逆向工程 hook explorer 的内部私有函数地址,然后 dispatch 到他们插件自己的代码上来实现各种功能的。explorer 哪怕只要稍微修改了代码使得内部的函数偏移之类的变化了,就会导致通过非法手段注入进来的第三方插件出现非法地址访问等等从而造成 explorer 崩溃。
只是退出插件没有用的,因为插件依然会试图注入 explorer ,只不过 dispatch 后的功能没启用罢了。
@onlxx123 你这个看上去是 dns 的配置问题了
@shuax 我就是 4K + 150% 缩放,但是没出问题。
239 天前
回复了 qping 创建的主题 Windows 求救 win11 突然特别卡,卡到爆
怕不是显卡驱动的锅,你要不要更新一下显卡驱动试试?
244 天前
回复了 hez2010 创建的主题 Windows 海外三星手机+Windows 的连携体验也太舒服了
@hez2010 这个功能在手机设置——连接设备——连接到 Windows
244 天前
回复了 hez2010 创建的主题 Windows 海外三星手机+Windows 的连携体验也太舒服了
@trihuan 三星不需要额外装什么 swiftkey 之类的软件,你需要用三星自带的“连接到 Windows” 功能。
搜索 IIS 的 ARR 和 URL Rewrite 插件装上,然后就能配置反向代理了。
其实今天几乎所有主流的开源软件背后都是大厂在主导,哪怕是 Linux ,大多数代码也都来自各商业厂商为了添加对自己产品的支持才有的所谓的贡献,理想中的自由的开源世界早已经名存实亡了。
可以考虑接上 .NET 自带的 OpenTelemetry 集成? https://learn.microsoft.com/dotnet/core/diagnostics/observability-with-otel
这样可以详细跟踪你的 asp.net core 的各接口甚至是数据库查询的执行情况,然后你只需要用 Jaeger 之类的就能做分布式追踪。
1 ... 2  3  4  5  6  7  8  9  10  11 ... 29  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5476 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 39ms · UTC 08:50 · PVG 16:50 · LAX 00:50 · JFK 03:50
Developed with CodeLauncher
♥ Do have faith in what you're doing.