lesismal

lesismal

V2EX 第 497905 号会员,加入于 2020-07-06 13:49:58 +08:00
以明文形式存储数亿个密码, Meta 被罚 1 亿美元
互联网  •  lesismal  •  62 天前  •  最后回复来自 GeekGao
3
深圳中院首次裁定宣告一对夫妻债务人破产
生活  •  lesismal  •  57 天前  •  最后回复来自 julyclyde
6
美国宣布全面禁止竞业协议
程序员  •  lesismal  •  201 天前  •  最后回复来自 ChrisFreeMan
2
github 被人 at 说币安空投,是诈骗吗?
程序员  •  lesismal  •  334 天前  •  最后回复来自 lesismal
2
4C-2G 来战 [ Golang Websocket 百万连接测试 ]
程序员  •  lesismal  •  355 天前  •  最后回复来自 lesismal
34
nbio 近期的一些功能更新,来骗点 star
  •  1   
    Go 编程语言  •  lesismal  •  2023-04-18 14:04:25 PM  •  最后回复来自 lesismal
    2
    lesismal 最近回复了
    1 天前
    回复了 hez2010 创建的主题 程序员 运行 100 万个异步并发任务需要多少内存
    @charles0 #152 叫 goroutine 没毛病, 但是打字中文的时候协程比 goroutine 快, 而且很多人约定俗称都这么叫了, 日常讨论, 何必搞得学术氛围甚至法庭审判那样? 你们好几位出来说这个, 我反向建议下你们在实际生活中要灵活, 否则方言俗语一切约定俗成的谬误的词汇就都不能说出口了, 这样的活法, 会很累而且并不会对交流效率带来提升, 反倒会因为这种死板给更多遵循约定俗成的人带来麻烦, 让大家交流效率更低
    1 天前
    回复了 hez2010 创建的主题 程序员 运行 100 万个异步并发任务需要多少内存
    @lesismal #151

    甚至, golang 的 GMP, 我都忘记了, 要说 10 年 8 年 5 年甚至 3 年前, 应该都还记得, 但是现在都不记得了, 刚才回复 @Kauruus 也是临时搜了下 GMP 才又知道了个大概.
    而且这几年自己可见的速度在记忆力下降, 每次看到 golang 面试题的帖子, 很多也是不会, 只剩下一些实践的套路经验了, 上年纪了也没体力重新读这些书了, 不是不想, 而是真的力不从心了
    幸好工作上也不太需要这些概念了

    华山派剑宗风清扬我做不到, 但是像他一样的风格还是适合工程实践的, 什么这个气那个气的内力之类的, 先能把工程搞定并且搞好才是好
    1 天前
    回复了 mikewang 创建的主题 程序员 14 岁的我,注册了 V2EX。
    早早入行, 未来可期, 加油加油!
    1 天前
    回复了 hez2010 创建的主题 程序员 运行 100 万个异步并发任务需要多少内存
    @Kauruus
    @CRVV

    补充一点, 工作久了也不是钻研学术的, 很多概念定义也早忘光了, 我更多的是专注于实践, 所以有说的不对的地方是我不懂, 说错了我就认, 不会赖账的

    另外, 就像我前面说的没必要咬文嚼字, 聊具体的代码问题, 不需要纠结严格定义的, 咱就少点学术氛围, 免得搞半天也搞不出个成果来
    1 天前
    回复了 hez2010 创建的主题 程序员 运行 100 万个异步并发任务需要多少内存
    @ykrank

    > 等你技术进步到和它“一个层次”了

    你这个"它"很会用啊, 你技术强的话可以输出技术观点, 技术的观点一点没有, 有话都不敢直接说, 阴阳最有一套是吧?
    你咋不上天呢?
    1 天前
    回复了 hez2010 创建的主题 程序员 运行 100 万个异步并发任务需要多少内存
    @Kauruus #145

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

    在对线程的细分定义上讲, 用户线程你说的对, @CRVV 说的也对.
    我之前没有深究过用户线程这个细分概念, 把它理解成非内核创建的线程了, 是我的错.

    不论严格定义如何, 把 goroutine 叫成协程已经是大家的惯用叫法, 日常讨论说线程用于代表严格意义的内核线程多些, 除非涉及细分定义, 否则也不会去区分用户线程还是内核线程.
    但是如果把 goroutine 叫成线程, 是更让人混淆的, 把 goroutine 叫成用户线程是严格定义上正确但在日常交流上更多也是会带来麻烦
    各种细分的严格定义, 例如说线程的时候不叫线程而是叫轻量进程, 也是给非学术交流带来沟通障碍, 约定俗成的叫法可能会更适合日常讨论.

    > 按照你的说法,就变成 M:N:O 三层了。

    我只是想表达: 线程 -> go runtime -> goroutine, 没有想表达是几层, 具体到 goroutine 的调度就是 go runtime 的 GMP,

    而且几层也得看怎么划分:
    如果按照调度实体分类, 那就是两层: 线程被内核调度, goroutine 被 runtime GMP 调度
    如果是按这些抽象角色分类, M/P/G 也可以说是三层
    1 天前
    回复了 hez2010 创建的主题 程序员 运行 100 万个异步并发任务需要多少内存
    @CRVV #140

    自己在那不 at 别人偷塔断言别人不懂说别人错了还理直气壮, 然后老夫硬刚你, 技术和逻辑都说不过就飙脏话是吗?
    既要又要, 又 x 又 x 的, 当别人眼瞎好欺负呢?

    谢谢你 Block 我, 免的以后再来浪费我时间
    1 天前
    回复了 hez2010 创建的主题 程序员 运行 100 万个异步并发任务需要多少内存
    @CRVV 刚又搜了下, 你说的"用户态线程"可能是指"纤程"吧? 对不起, 这玩意好像是 Windows 的, Windows 开发相关的知识我确实是不熟悉, 我说的主要是*nix 的
    1 天前
    回复了 hez2010 创建的主题 程序员 运行 100 万个异步并发任务需要多少内存
    @CRVV #128

    你真逗, 社区里大家都叫协程, 你为了严谨, 非要叫"线程"或者"用户态线程".

    而且, 你让我用 "线程或者说用户态线程" 就更扯了:
    1. 线程比协程更具有辨识度, 通常是操作系统内核进行调度的, 比如 CSAPP 里这样讲:
    https://cs50mu.github.io/post/2016/08/29/csapp-concurrent-programming/

    Threads. Threads are logical flows that run in the context of a single process and are scheduled by the kernel. You can think of threads as a hybrid of the other two approaches, scheduled by the kernel like process flows, and sharing the same virtual address space like I/O multiplexing flows.

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

    你要是说 goroutine 是"类似线程的东西"这种模糊的定义还凑合, 但是直接把 goroutine 叫做线程或者用户态线程, 你可以做个问卷调查看看, 是我们把它叫做协程容易让人懵逼还是你的叫法更容易让人懵逼.

    > 技术词汇和 “那可不是嘛” 是两码事

    方言, 约定俗成这些事你如果不认同, 那咱们不用讨论这个了, 但是也请尽量弄清楚你自己的技术词汇是否真的准确, 比如 goroutine 线程.


    > 但你说的最后一段就是纯扯蛋,不要论断人。

    如果不想自己被他人断, 就不要自己先乱断他人.
    1 天前
    回复了 hez2010 创建的主题 程序员 运行 100 万个异步并发任务需要多少内存
    @kneo #122

    > 如果还是因为 goroutine 本身的性能原因而使用 pool ,我认为就语言实现层面还是差点意思。

    是单个 runtime 的阈值. 我日常 4c8g vm 跑个压测, 10w 协程这种级别, 调度/内存/gc 都没什么压力的. 但是 50w 以上, 压力就大了起来, 1M 级别的压力就更大了, 耗费非常高的硬件仍然稳定性艰难.
    标准库是满足了绝大多数人的需求, 因为没这么大量, 足够好的性能, 但少量业务还是需要海量的, 能稳定高性能低消耗就能省很多硬件成本.

    > 回到这个帖子所引用的原文,我认为它至少从一个方面回答了到底在哪还差了点。

    不同的业务 golang 有不同的应对方案, 我前面也说过了, blog 作者用这种方式测这个并发任务属于错误用法, 而其他场景, 也会有对应的优化 goroutine 数量的方案.

    但有些场景确实目前还没有海量 goroutine 的优化方案, 例如 HTTP2.0 QUIC/HTTP3.0, 暂时还是一个连接至少一个协程的方案, 因为目前的 2.0 3.0 实现都还是基于标准库的 net.Conn 都还是阻塞的 IO 接口.
    我想把 nbio 做更多支持这些, 但是工程量太大了, 年纪也大了体力跟不上, 而且是业余时间为爱发电不是全职搞, 个人的精力消耗实在承受不起.
    我希望以后能有人继续把 HTTP2.0/3.0 以及更多协议也搞成类似 nbio 的这种方案, 然后就不用再担忧这些瓶颈了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2597 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 06:28 · PVG 14:28 · LAX 22:28 · JFK 01:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.