V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  lesismal  ›  全部回复第 26 页 / 共 62 页
回复总数  1239
1 ... 22  23  24  25  26  27  28  29  30  31 ... 62  
2023-05-16 18:22:58 +08:00
回复了 skoofancy 创建的主题 程序员 HHKB 是不是程序员必备键盘?人手一把?
每当看到这种话题,我都为自己用的是几十块的普通键盘感到羞愧;
每当看到一些 HHKB 同学的垃圾代码,我都替 HHKB 键盘感到耻辱。
2023-05-15 16:04:17 +08:00
回复了 inhzus 创建的主题 程序员 左耳朵耗子于周六晚突发心梗去世
RIP
2023-05-10 20:31:03 +08:00
回复了 piaodazhu 创建的主题 Go 编程语言 Golang 分享一个有趣的任务并发控制器
@hzzhzzdogee 代码 append 了下,代码量更少了,也变强了:
1. 增加了 context
2. 去掉了 rollback 回调,因为类似 sql 那种 defer rollback()就可以了
3. 子任务 err 后就不再向上调用父任务了

虽然想不出实际场景哪里需要这样用,但是蛮有趣的
2023-05-10 20:23:25 +08:00
回复了 yazinnnn 创建的主题 程序员 笔记本上的 cpu 已经可以干过 13700 了....
AMD 又骗我 YES !
再买 AMD 我是狗!
2023-05-06 18:29:19 +08:00
回复了 Saitama 创建的主题 程序员 金蝶 ERM 是一坨大粪还是我是大粪。
这行业里的老大 SAP 还有各种学习认证呢,ERP 这种系统还是很复杂的
2023-05-06 18:24:01 +08:00
回复了 fzzff 创建的主题 程序员 吐槽下, minio 的更新也太频繁了 nnd, 完全不考虑向前兼容吗
快速发展的事物,"向前兼容"会导致"向后不行"。nodejs 这些年才叫一个快
2023-05-05 00:32:39 +08:00
回复了 piaodazhu 创建的主题 Go 编程语言 Golang 分享一个有趣的任务并发控制器
@piaodazhu
百十来行随便写了个树状的并发流控:
https://gist.github.com/lesismal/6b397b12bb1e328395873a2c35a71af0

这个树状,基本就可以衍生出各种并发依赖的流程的控制了,而且直接结构体树状生命就可以,看上去可能清晰点。
并发度也是先执行最底层依赖、即叶子节点,每个 node 的叶子都执行完后、其中最后执行完的那个叶子协程复用继续执行该 node ,并依次层层向上直到根任务、整个任务树完成。如果想限制协程数量,把直接使用 go 创建协程的部分改成使用协程池就可以了。

只是简单示例,所以没加 context 之类的,而且实际情况中 context 的 timeout cancel 这些也都存在临界问题。
比如 sql ExecContext ,context 可能超时返回 error 了,但其实数据库已经收到了指令并且执行成功、只是返回的比 timeout 时间久了一点点。所以 context 这些并不能保证幂等性。
如果多个并发流的任务其中一个或者多个发生错误并已经触发了 rollback ,go 里也没法去用 context 或者其他方式强制其他协程中止流程,只能是执行到某一步时去判断了 context Done 或者状态才能提前中止,所以请不要在意失败示范中 rollback 后还打印了 4 的日志。

单进程内的事务也好,那些所谓的分布式事务也好,数据要求强一致的场景,基本都是要靠数据层的数据状态来做幂等性判定。
分布式事务的那些流程设计、方案设计,也几乎(或者更自信点,把这几乎这两个字去掉)没有能够百分百确保完全依靠代码实现执行成功或者回滚,往往需要人工流程手动操作。
2023-05-02 22:03:48 +08:00
回复了 piaodazhu 创建的主题 Go 编程语言 Golang 分享一个有趣的任务并发控制器
> Tasks will run concurrently, but taskB will not start until taskA completes, and taskC will not start until both taskA and taskB complete. But if taskC failed (return err!=nil), ExampleUndo("BindArg-B") will be executed.

这。。如果我没看错的话,这串行执行就可以了吧:
A()
B()
if err := C(); err != nil {
Undo()
}

这弄成并发任务管理器去做,是不是把本来简单的问题复杂化了。。
因为没有一个真正够好。
2023-04-28 18:27:44 +08:00
回复了 voidmnwzp 创建的主题 Go 编程语言 写了个 err warp,或许可以少写点 if err
@777777 #6 你不是一个人!喜欢 if err 的人多着呢,只是我都懒得喷那些喷 if err 的人罢了
2023-04-28 18:25:37 +08:00
回复了 Nazz 创建的主题 Go 编程语言 修改 go websocket server 启动方式, 内存占用立省 40% !
> 不开新 goroutine 好点, 反正 http 包里面很多东西 gc 不了.

是。标准库让人又爱又恨的
2023-04-28 18:24:08 +08:00
回复了 Nazz 创建的主题 Go 编程语言 修改 go websocket server 启动方式, 内存占用立省 40% !
> copy 比 append 更快些

恩。
前提是得比较明确 size cap 这些,很多地方是 buffer size 可能不够,即使 copy 也是得先 append 扩容。
预先知道 size 并且分配了足够 size 的 buffer ,我也是 copy:
https://github.com/lesismal/nbio/blob/master/nbhttp/websocket/conn.go#L263
2023-04-28 15:05:10 +08:00
回复了 Nazz 创建的主题 Go 编程语言 修改 go websocket server 启动方式, 内存占用立省 40% !
> 现在改成用户态拼接 buffer 的方式了, bytes.Buffer 没有 Discard 方法, 压缩那块写得有点丑
> 忽然发现 next 就相当于 Discard :)

@Nazz 主要是你 write frame 的场景,就一 head+body 拼接,太简单了,pool+append 足矣
2023-04-28 15:01:49 +08:00
回复了 YaakovZiv 创建的主题 生活 我变成了公司的下班冲锋浩
OP 打工人之光
2023-04-28 15:00:45 +08:00
回复了 Nazz 创建的主题 Go 编程语言 修改 go websocket server 启动方式, 内存占用立省 40% !
> 但毕竟不是 c free ,不能立即释放

#4 更正,c free 也不一定是立即归还的、而且多数时候不是立即归还,要看分配器实际情况了

> 单就 upgrade 这个 request 而言,可能上下文的代价比新 go 更大一点

#15 更正,单就 upgrade 这个 request 而言,可能相比于上下文的代价、新 go 代价更大一点
2023-04-28 14:56:56 +08:00
回复了 Nazz 创建的主题 Go 编程语言 修改 go websocket server 启动方式, 内存占用立省 40% !
@lysS 跟是不是浏览器应该没关系,而是 ws 协议就是这么规定的,go 的 client 也是要发这个握手的 request 的。
2023-04-27 22:38:11 +08:00
回复了 Nazz 创建的主题 Go 编程语言 修改 go websocket server 启动方式, 内存占用立省 40% !
@Nazz 得实测看看,正常情况狂不应该有这个问题。差异不大可能是测试稳定性的问题可以忽略。如果差异很大,代码发我瞧瞧
2023-04-27 22:08:40 +08:00
回复了 Nazz 创建的主题 Go 编程语言 修改 go websocket server 启动方式, 内存占用立省 40% !
> bytes.Buffer 应该比手撸的更快

并不是。首先它一样的是挂载在 conn 上需要持续占用大段 buffer ,其次它源码你看下就知道了,还是那些个 buffer 的操作、只是封装些常用方法方便用户罢了。buffer 操作这种事情并没有什么性能提升的秘诀,就是谁的逻辑代码消耗更少、拷贝更少之类的
2023-04-27 21:12:46 +08:00
回复了 Nazz 创建的主题 Go 编程语言 修改 go websocket server 启动方式, 内存占用立省 40% !
@Nazz #19 就是因为这些各种原因,很多地方我手撸 buffer ,好累:joy: 。。。
1 ... 22  23  24  25  26  27  28  29  30  31 ... 62  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1618 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 33ms · UTC 16:39 · PVG 00:39 · LAX 08:39 · JFK 11:39
Developed with CodeLauncher
♥ Do have faith in what you're doing.