V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  nlzy  ›  全部回复第 2 页 / 共 25 页
回复总数  494
1  2  3  4  5  6  7  8  9  10 ... 25  
2022-10-17 07:48:26 +08:00
回复了 hardwork 创建的主题 程序员 c/c++多线程读写问题,怎么反驳?
@ivvei 你这都发的什么回复。。。这个例子本来就是一个错误的例子,那个 ready 变量确实没有用,这个程序就是错误的。而且我给出的例子用 gcc 10.1 x86_64 编译出来,读写也都是一条指令。所以我都不知道你在反驳什么。
2022-10-16 17:11:37 +08:00
回复了 hardwork 创建的主题 程序员 c/c++多线程读写问题,怎么反驳?
> @nightwitch “这段代码会有什么问题呢?”

说过了,两个内存访问操作,且其中有一个是写操作,若这两个操作没有 happens-before 顺序,则必须使用 std::atomic 里的操作,否则就是数据竞争,是未定义行为。违背这条规则,就是最大的问题。

就在你发出的链接里,看看 f() 的汇编码,你会发现按照你理解的“rmrf = 0 的结果应该是可见的”,实际上确实程序根本就没有第二次去读 rmrf 这个变量。
2022-10-16 12:14:18 +08:00
回复了 hardwork 创建的主题 程序员 c/c++多线程读写问题,怎么反驳?
以前我听说有些公司的代码规范里不准用多线程,我还觉得可笑。但活得越久,我就越觉得,多线程编的困难超出了绝大多数人的想象,至少一半以上的专业程序员“不配”写多线程相关的代码,真的不如禁用了拉到。

两个内存访问操作,且其中有一个是写操作,若这两个操作没有 happens-before 顺序,则必须使用 std::atomic 里的操作,否则就是数据竞争,是未定义行为。这么简单的判断方法,和原子性可见性内存顺序 ISA 什么单核多核半毛钱关系都没有,居然还能判断出错?那也别怪我发“不配写”的言论,这篇帖子不过是再一次印证了我的观点。

觉得是 x86 就可以无视以上规则,觉得是单核处理器就可以无视以上规则的,觉得不用自增运算符就可以无视以上规则的:有本事去掉注释后在生产环境里多跑两遍我贴的这段代码,用 gcc 10.1 或者 clang 12.0 以上版本编译,开 O2 选项。

https://gist.github.com/nlzy/06d6341979b5bb5c1456c654625d89f2

(开玩笑的,这这么干,大概率会损害你的操作系统)
2022-10-13 07:43:57 +08:00
回复了 nlzy 创建的主题 宽带症候群 发一个通过漏洞精准识别 VMess over TCP 的原理和代码
@jim9606 觉得哪个部分导致特异度不高?
2022-10-12 12:58:07 +08:00
回复了 nlzy 创建的主题 宽带症候群 发一个通过漏洞精准识别 VMess over TCP 的原理和代码
@bybyte 造一个能小范围内使用的协议实在没什么难度,造一个能广泛使用的就不是那么简单了
2022-07-28 16:30:23 +08:00
回复了 tool2d 创建的主题 硬件 正常情况下, CPU 和显卡多久需要换一次硅脂?
在网上看到过不少人给显卡换了硅脂之后惊奇地发现温度不降反升,楼主不信的话可以试试
2022-06-27 04:01:36 +08:00
回复了 juejinloop 创建的主题 Linux Linux 高分屏缩放方案(分数缩放)
我用的也是非整数缩放,X11 下的 i3wm ,在 ~/.Xresources 里使用 Xft.dpi 设定 DPI 值。无论是 GTK 还是 Qt 效果都清晰锐利,fcitx 和 flameshot 也都能正常使用。画面撕裂的情况我是使用 picom 避免的。
2022-06-16 02:20:21 +08:00
回复了 bbsabc2 创建的主题 程序员 作为一名二本计算机专业的教师,如何点亮学生的技能树
@fatigue 你生活中嘴也会这么欠吗?
2022-06-16 01:44:50 +08:00
回复了 bbsabc2 创建的主题 程序员 作为一名二本计算机专业的教师,如何点亮学生的技能树
我也是三本院校的计算机学生,下周就毕业啦。

我在学校里算是学得比较好的(可能是这届最好的?)。其实也曾经天天骂学校开一堆什么 JSP 什么 SpringBoot 这样的技术课程,也希望老师可以多开一些基础的课程,希望讲义和实验也能跟上网上的优质公开课。至少我都是自己购买教材、自己在网上找公开课资源,靠着自学把计算机基础知识打牢的。

我这样的学生吧,对于学校开什么课程其实是不太关心的。课上得好我会去认真听,课上得不好我会旷课自己学自己的。只要不是上课又烂又爱抓考勤来卡人的老师,我都在期末教师评价里给了满分。

其实路都是自己走出来的,所以老师在课程改革的努力就没有意义吗?不是!我的同学在校期间,大部分对于就业的发展方向是没有概念的,学校教什么就学什么,也不会主动自学去拓宽知识。学校的教学内容对他们的知识面影响很大,老师这个时候该给学生指好路、带好路的。就像楼上说的“不能放弃这些学生,不是人人名牌大学,他们也要上学工作。”

我是反对楼上说的抓基础、抓原理的,真正对基础和原理感兴趣的学生一个年级可能就两三人,他们会自己学的。别把重点放在基础和原理上,且不说师资力量能不能教得好,也不说学生能不能学的进去,就单说就业:像我们学校出来的,能在小厂干开发就算不错,大多数人还是混个运维或者测试的岗位,也算专业对口。面试这样的公司和这样的岗位能要多少基础知识和底层原理?普通学校侧重“计算机科学与技术”里面的“技术”二字,不仅不丢人,相反我觉得务实得很。

楼上说的把数学课全删,基础课删大半我觉得还是过了,至少我学校这届高数线代离散都有,C 语言、数据结构、算法设计、计算机网络、数据库原理、操作系统原理、组成原理、体系结构、编译原理这些核心课程都还是全的。

回到课程的设置上,我觉得 Java 后端、Web 前端都没什么问题,身边的同学都有靠这个吃上开发这碗饭的。MySQL 和 Linux 也搞一搞,不管是做后端开发还是做运维都要用。软件测试必开,毕竟开一门课就能让学生多投一种岗位,性价比高得不行。

嵌入式或许可以搞搞,我印象里嵌入式相关的岗位好像不太看重学校层次。缺点是需要的课时数量实在是太多,不适合让所有学生把相关课程都搞完。

人工智能就真的拉倒吧。
2022-05-18 03:55:26 +08:00
回复了 moonheart 创建的主题 Linux 切换到 Debian sid 使用一个月的体验
> Debian 11 的 ISO 自带的内核是 5.10, 当时安装的时候就发现不对劲,Wi-Fi 不工作;一番搜索之后才发现我的笔记本网卡是 MT7921 ,要从 5.15 内核才支持。

Debian 有 backports 源,目前 Debian 11 backports 中的内核版本是 5.16
2022-05-10 08:20:16 +08:00
回复了 void59468 创建的主题 C++ gcc 可变长度数组
-Werror=vla
2022-05-08 14:25:01 +08:00
回复了 chanlk 创建的主题 Java Java Happens-before 的疑问
@chanlk 上完整代码
2022-05-08 07:26:21 +08:00
回复了 chanlk 创建的主题 Java Java Happens-before 的疑问
直接给结论:如果语句 4 执行了,4 一定能保证读到 a 的值是 42 。A 和 B 线程的执行顺序不影响这个结论。

反对楼上说法的说法:“Happens Before 原则,只提到同一个线程内的连续上下文,并没有提跨方法、跨线程的问题。”

Java 8 语言规范 Threads and Locks 那一章对 Happens-before Order 的第一句介绍偏偏就是:“Two actions can be ordered by a happens-before relationship.”。而 action 一词在那章规范中就专指跨线程:“We will usually refer to inter-thread actions more succinctly as simply actions.”
2022-04-08 23:40:15 +08:00
回复了 dangyuluo 创建的主题 C++ CPU 指令重排是 cache 同步太慢的表征么?
“这种重排是不可能发生的”,“CPU 某个核心上的指令重排现象”。我认为此处“重排”楼主意指内存乱序。

“多核 CPU 也是可以对指令进行重排的”,“CPU 是可以把指令重排成如下顺序”。我认为此处“重排”楼主意指乱序执行。

仅仅是“重排”这一词的使用就出现了混乱,主楼的其他部分就更不值得细细推敲了。我以为此处的混乱,正是楼主感到迷惑的根源:即使没有乱序执行,store buffer 就足以导致写读乱序。即使指令集架构保证读读连贯,也不能说明微架构没有投机加载。这两个东西就是风马牛不相及。更何况内存顺序是指令集架构定义的,而乱序执行是微架构的具体特性,连抽象层面甚至都不是一个层级。把两个根本不相干的事物混淆在一起,不感到迷惑才奇怪呢!不仅迷惑了自己也迷惑了读者,所以也不怪楼下有老哥留下“一顿胡扯”,“看着头大”的暴躁回复。

一个混乱的问题真的很难去回答,建议楼主可以把自己帖子里的“重排”一词,换成指代更清晰的“编译器重排”、“乱序执行”或“内存乱序”后再重新提问。同时诚挚向楼主安利《 A Primer on Memory Consistency and Cache Coherence, Second Edition 》一书以正视听。
@LeeReamond 外层循环的运行次数肯定少于内层循环。这也是没考虑 sqrt() 对性能的影响的原因,它们的运行次数都远远少于那两个表达式。
看了眼源码,是用试除法计算素数。那汇编都不用细看了,只要编译器不作妖,程序的瓶颈肯定是 l <= t 和 if (c % l == 0) 这两句。和缓存、访存关系都不大了。

虽然有一个 if ,但是这个分支比较好预测:即使是静态预测,每个不同的 c 也只会预测失败一次,所以和分支也没什么关系。循环条件同理。

同一个 c 的每一轮试除,l 是循环变量,而 c 和 t 是不变的,所以上述良好的分支预测再加上投机执行,是可以掩盖掉他们的延迟的,所以程序的瓶颈大概就是 l <= t 和 c % l 这两句的吞吐了。前者是整型转浮点然后比较,后者是一个除法。

上网查资料,zen2 的 div 吞吐率倒数是 13-44 ,zen3 是 7-12 。而 cvtsi2sd 和 comisd 在 zen2 和 zen3 上都是 1 。瓶颈在前者,后者可以忽略掉,而前者在 zen2 和 zen3 的性能差距正好大约是三倍。(浮点和整数除法的执行单元应该不冲突吧)

这大概就是楼主想要的答案了。

至于 mov %rdx, %rax ,寄存器重命名阶段就已经处理掉了,不会是瓶颈。

(唉,我为什么要大半夜不睡觉去分析这种编译器优化都没开,代码也没有仔细写的程序呢)
2022-01-24 19:23:22 +08:00
回复了 amiwrong123 创建的主题 C++ c++函数返回临时变量和局部变量,有什么区别?
https://zh.cppreference.com/w/cpp/language/return

自动从局部变量和形参移动
这题也可以看成是 DFA 的典型例题,就像 #15 说的:“作业基本都是这种东西”。而 DFA 和正则表达式可以互相转换,所以构造出 DFA 再一步步转成正则就可以做出来了。

我做了做,得到了 ^(0(11)*0)*(1|01(11)*0)(0(11)*0)*((1|01(11)*0)(0(11)*0)*(1|01(11)*0)(0(11)*0)*)*$

最后的结果我自己也看不懂,这只是我机械地套用公式得到的,所以楼主没必要为看不懂这些正则而灰心丧气啦。
2021-09-03 00:29:42 +08:00
回复了 hutng 创建的主题 硬件 Intel 即将发布的大小核 CPU,各位怎么看
多核性能强单核性能也强的处理器谁不喜欢呢,我很看好大小核的前景
2021-08-11 16:54:20 +08:00
回复了 nlzy 创建的主题 求职 [深圳] 2022 届毕业生,求不 996 的 C++ 实习( Java / Node.js 亦可)
@hjiang
@7S5cVx
抱歉,不考虑其他城市
1  2  3  4  5  6  7  8  9  10 ... 25  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   978 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 45ms · UTC 23:24 · PVG 07:24 · LAX 16:24 · JFK 19:24
Developed with CodeLauncher
♥ Do have faith in what you're doing.