V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  Kauruus  ›  全部回复第 1 页 / 共 2 页
回复总数  27
1  2  
@rainbowStay 不存在 “go 不推崇依赖注入” 的。
11 小时 47 分钟前
回复了 LZYMichael 创建的主题 程序员 眼睛好痛,大家编辑器用的什么主题
尽量统一就行,不要在深色、浅色页面来回切换,瞎眼。

我是一直用亮色主题的,浏览器也强制用浅色。
转行做套壳还是来得及的,感觉连不知道 NLP 和 word2vec 都没问题。

转行做模型,没钱没卡没数据,怕是来不及了。
6 天前
回复了 codigger 创建的主题 程序员 程序员与编程领域,似乎符合 10x 定律
把下限拉低(初学者),把上限拉高( 3 周产出应用的独立开发者),自然能比出 10x 。
12 天前
回复了 hez2010 创建的主题 程序员 运行 100 万个异步并发任务需要多少内存
@lesismal

> 而一个 golang 进程首先是进程自己有一组(1-N 个)用户态线程, goroutine 是基于用户态线程之上的应用层语言 runtime 自己进行调度的, 最大的区别, goroutine 可不是由内核调度的。

“这组线程”就是内核线程,有对应内核调度实体,Goroutine 才是“用户态线程”。

这是非常普遍的 M:N 调度模型。M 个 Goroutine/Green thread/virtual thread/ 调度到 N 个内核调度实体上。

当然 Go 为了方便迁移 Goroutine ,还有个 P 的概念,不影响 M:N 的关系。

按照你的说法,就变成 M:N:O 三层了。
12 天前
回复了 hez2010 创建的主题 程序员 运行 100 万个异步并发任务需要多少内存
@james122333 Go 运行时不是会调度 goroutine 吗?

> 它更像是单纯的线程 配合 channel 调度才能对标虚拟线程或线程池

你不用 channel 它也会被运行时调度到物理线程上执行呀,运行时内部也有队列呀。
12 天前
回复了 hez2010 创建的主题 程序员 运行 100 万个异步并发任务需要多少内存
@james122333

virtual thread 和 goroutine 是一个可以被调度的实体,或者说是用户态线程,有自己的栈。

channel ,BlockingQueue 这些是消息通讯机制。

然后调度器都是队列,把用户态线程调度到物理线程。

所以我没明白你说的 “这虚拟线程对标 go 应该是 goroutine+channel”。
12 天前
回复了 hez2010 创建的主题 程序员 运行 100 万个异步并发任务需要多少内存
@james122333 感觉 java 的 ThreadPoolExecutor 才是你说的 goroutine + channel ,一个线程池 + 队列执行任务。

Thread.startVirtualThread 和 go 一样是“使劲狂分资源”,然后给调度器(里面自然是有个队列的)调度,virtual thread/goroutine 遇到阻塞的时候把执行权给会调度器( Go 也有抢占调度,不知道 virtual thread 有没有),让它调度下一个 virtual thread/goroutine 。
12 天前
回复了 hez2010 创建的主题 程序员 运行 100 万个异步并发任务需要多少内存
所以一个 goroutine 大约用 (2641592 - 3644) / 1000000 = 2.64 KB 内存?应该还有些 timer 的消耗在里面。

然后 Java virtual thread 是 (1117640 - 46304) / 1000000 = 1.07 KB ?是因为默认的栈更小还是其他原因?
22 天前
回复了 pike0002 创建的主题 Go 编程语言 Go 语言中的接口 nil 检查需谨慎
> The static type (or just type) of a variable is the type given in its declaration, the type provided in the new call or composite literal, or the type of an element of a structured variable.

静态类型是变量声明时的类型。

> Variables of interface type also have a distinct dynamic type, which is the (non-interface) type of the value assigned to the variable at run time (unless the value is the predeclared identifier nil, which has no type).

接口类型变量还有一个动态的类型,这个类型是运行期赋于的*值的类型*,除非那个值是**预先声明的标识符 nil**,它没有类型。

这里很明确地区分了 标识符 nil 和一个值的类型。


解释了把 (标识符 nil )和 (一个为 nil 的值)赋值给一个 interface 的区别,前者没有类型,后者值为 nil 但是有类型。


> Two interface values are equal if they have identical dynamic types and equal dynamic values or if both have value nil.

两个接口值只有在动态类型和值都相等时相等。
22 天前
回复了 pike0002 创建的主题 Go 编程语言 Go 语言中的接口 nil 检查需谨慎
不明白为什么一个现代的语言还满地的 nil 。

也不明白为什么需要知道它的实现(接口值是类型+值 blah blah )才能理解它的行为。

能不能根据 The Go Programming Language Specification 来解释一下这个行为?
实在不行你可以编译成 wasm 然后用 wazero 执行。

直接支持全部 Go 特性,直接用 Go 编译器编译,通过 wazero 暴露方法给它调用。
用 migrate 管理,但不自动执行。

用 sqlc 生成 db 模型和查询。根据需要可以手工映射一次,隔离 db 实现。
65 天前
回复了 ityspace 创建的主题 Linux 推荐一个平铺化桌面 Niri
用了一段时间,然后在主力机放弃了。

我通常会开浏览器,编辑器,terminal ,然后需要快速切换,完全用横行的话切换就很麻烦(也许有 shortcut ?)。另一种就是一个 workspace 放一个应用,然后 Mod + N 切换。结果就有了一个二维的窗口管理,略复杂。

非主力机还在用,开箱即用,也方便我关内置显示器。
提个 CI 的改进 PR ,直接用工具(例如 typos )检查整个仓库的 typo 。而不是每个(或每几个) typo 提一个 PR 。
AES-256-GCM.

GCM 是 AEAD ,在密钥不对的情况下,它会告诉你密钥不对,而不是强行用错的密钥解出一堆错误的数据。

即暴力试 2^128 次就能解开第一个密钥,再试 2^128 次解开第二个密钥。而 AES-256-GCM 需要 2^256 次。

所以两次 AES-128-GCM 并不能提供 256 bits (2^128 * 2^128) 的安全,只能提供 129 bits (2^128 + 2^128)。
你用过 Go 的 math/big (或者其他 decimal 包)就知道了,他们的加减乘除是这样的:

```
func (z *Int) Add(x, y *Int) *Int
func (z *Int) Sub(x, y *Int) *Int
func (z *Int) Mul(x, y *Int) *Int
func (z *Int) Quo(x, y *Int) *Int
```

本来一行就能写完公式,你用上面的 API 要不断搞中间变量,硬是写成十几二十行,每次写点复杂的计算公式或者 code review ,我就头大,非常想要运算符重载。
@zeusho871 目前 llgo 对 go 支持不咋地,连 fmt, net/http 这些都没有 :(
之前有人做过测试,以 C 为基线,Rust 的运行时检测大约带来 1.77x 的损耗,其中 bound check 大约占 50%。

https://dl.acm.org/doi/fullHtml/10.1145/3551349.3559494
1  2  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   786 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 26ms · UTC 22:04 · PVG 06:04 · LAX 14:04 · JFK 17:04
Developed with CodeLauncher
♥ Do have faith in what you're doing.