V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  lewis89  ›  全部回复第 27 页 / 共 83 页
回复总数  1645
1 ... 23  24  25  26  27  28  29  30  31  32 ... 83  
2020-12-04 14:41:11 +08:00
回复了 Braisdom 创建的主题 程序员 Java 运算符重载(Operator Overloading)原理
@no1xsyzy #6 有的时候 选择太多并不是一件好事,C++为什么被称为 horrible 的语言 就是因为选择太多了,一个 option 的选择有 3 个 另一个 option 有 3 个 再加上一个 option 的选项有 7 个 3 * 3 * 7 = 42 种选项.. 脑子都会炸
2020-12-04 14:03:18 +08:00
回复了 Braisdom 创建的主题 程序员 Java 运算符重载(Operator Overloading)原理
重载运算符是一个优秀的特性???????老哥不是开玩笑吧
operate *
operate +
operate =
犹如噩梦啊,再配合 拷贝构造 引用 指针 指针的引用 右值引用 左值引用 不把脑子搞炸那还是 C++?
2020-12-03 23:50:41 +08:00
回复了 vevlins 创建的主题 程序员 协程跟 cpu 有关系吗?
@no1xsyzy #22 我找了 CPS 的中文文章 看了老半天 也没看明白.. 可能我只能理解命令式的编程方式吧
2020-12-03 22:39:38 +08:00
回复了 vevlins 创建的主题 程序员 协程跟 cpu 有关系吗?
@no1xsyzy #16 还要依赖特定指令集? 传统的协程 确实就是 保存一下 stack 栈帧 切换一下 PC 寄存器就完事了,我确实不了解除此之外的协程方式
2020-12-03 22:35:55 +08:00
回复了 vevlins 创建的主题 程序员 协程跟 cpu 有关系吗?
@no1xsyzy #11 回去读 CSAPP 吧, 或者看看 X86 汇编手册,RSP RBP 加 PC 指针 然后使用 mprotect 注册内存访问保护 实现中断信号量访问,唯一的确定就是没有时间相应, 用这个几个东西 完全就可以实现简易版的协程
2020-12-03 22:33:35 +08:00
回复了 vevlins 创建的主题 程序员 协程跟 cpu 有关系吗?
@no1xsyzy #8 不需要基础概念吗?

理论上讲 你只要知道 RSP RPB 跟 PC 三个 X86 指针 在汇编层面上 实现个协程就是分分钟的事情
2020-12-03 22:31:50 +08:00
回复了 vevlins 创建的主题 程序员 协程跟 cpu 有关系吗?
@no1xsyzy #7 怎么会有分支预测,协程 协程 就是协作式的调度方式,也就是说 一个协程 霸占着线程 完全可以不退出,因为没有时钟中断,完全可能协程占着那个线程不放,协程要退出来只能主动退出调度,例如你写了个协程

for i=0; i++ ;i <1000
{
干活;

看一看是不是干了好久要不要先退出去让别的协程跑一跑?

function();
调了个函数 被 golang hook 住了 要不要先退出去 让别的协程跑一跑?

}



线程

for i=0; i++ ;i <1000
{
干活; <-- 去你娘的 时间片到了 回内核睡大觉吧。
function();
}
2020-12-03 22:06:17 +08:00
回复了 vevlins 创建的主题 程序员 协程跟 cpu 有关系吗?
协程是协作式的,例如我一个协程要调用 IO 了,我就通知 golang 的 IO 管控线程,我把 IO 调用 写进缓冲区 交给管控线程,然后你这个协程就放弃线程的 CPU 时间片,让其它的协程去跑起来,然后管控的线程就帮你把 IO 的请求 写进 fd-set 然后交给 epoll 调用 ,epoll 返回回来 发现你上次写的 IO 返回了,管控的线程就让你这个协程加进调度队列,等下次别的线程空出来的时候,你这个协程就可以继续跑起来干活。

传统的 Java 线程池就是 线程我要写 IO 了,然后调 IO pending 住,这个线程就去内核睡大觉了,如果线程 IO 多了,大家都得去内核睡大觉,内核睡大觉 有好几个调度队列 ,前面的人醒来干完自己的时间片才能轮到你,在内核睡大觉 还有一个麻烦就是 ring3 切换到 ring0 使用 int3 特权指令耗时 而且频繁切换 内核到应用态的上下文 很耗时,协程的话 在应用态只要把 几个寄存器跟 PC 寄存器 换到内存 然后把栈空间维持住,下次就可以实现协作式的调度,缺点是没有时间片(时间片只有内核中断向量注册后 才能响应硬件时间中断 类似的嵌入式芯片还有 watchdog 以免代码跑飞 ),有的协程跑了老半天 可能没跑到 协程退出占用的地方就把别的协程给饿死了。
英语确实好 会发音就会拼写 ,象形字本身是反人类的,学习成本极高,在古时候是统治阶级掌握的东西,一般老百姓都是不会写的,但是字母语言 你只要会说话 26 个字母表 基本上会拼就会写跟读
象形字学习成本高,phonetic or phonetic-like language is the future
2020-12-01 15:30:28 +08:00
回复了 Nebo 创建的主题 程序员 不懂就问:关于查看官方文档的困惑。
@Nebo #6 别人怎么总结出来的?其实没啥总结出来的,无非就是对底层内核实现跟操作系统原理的了解,因为大部分科班毕业的都读过操作系统原理跟体系结构,虽然内核实现细节很多,但是原理并不是太复杂,有兴趣可以去了解一下两本书 Unix 环境高级编程 Linux 编程手册 CSAPP 操作系统原理 读完这几本基本上体系结构就明了,上头封装的东西就那么回事。

因为大部分应用层编程 是用不到 direct memory 的, 也就是说一次 IO 至少 写-拷贝 2 次 读-拷贝 2 次,但是这个消耗对大部分应用来说根本就不算是一个事情,你要应把这个抽象去掉是没有意义的,就像我用的这个 Chrome 浏览器,你说它下载 V2EX 10mb+ 的网络数据 从内核拷贝两次到用户态 算个事情吗? 内存总线速度快得很,根本没必要去优化这个东西。
2020-12-01 07:56:43 +08:00
回复了 ypfepwxn 创建的主题 Linux 想找一个超精简的 Linux
@Osk #54 dependency hell
2020-12-01 07:53:48 +08:00
回复了 Nebo 创建的主题 程序员 不懂就问:关于查看官方文档的困惑。
没啥原因,人家这个是个基础的教程,你非要人家面面俱到怎么可能,Linux 教程教你文件读写 也是上来先 fd = open(
"/data/path","w+") write(fd)

不会上来教你 mmap 吧... 另外 mmap 使用的场景也很少,大部分时候 一次 IO 拷贝 4 次 并不是一个太大的问题,除非你确实在高性能场景需要去大量传输数据
2020-11-30 13:31:16 +08:00
回复了 forgotmymilk 创建的主题 硬件 上海在哪找靠谱的上门装机服务?
都有防呆设计的 除非你硬怼,那谁也救不了你
2020-11-30 11:54:26 +08:00
回复了 Ptu2sha 创建的主题 程序员 30 以后还能依靠技术吃饭吗
Redis 是 2010 年诞生的
其中 sortedSet 使用的 skiplist,即跳表是由 William Pugh 在 1989 年发明的
我们 2020 年还在用 Redis 的 sortedSet 是人家 80 年代末发明的玩意

哪有什么新东西.. 阻塞式 IO 后面又诞生了 EPOLL 的这样的多路 IO 复用实现,
用的是红黑树,红黑树是在 1972 年由 Rudolf Bayer 发明的

Redis 的主要实现语言 C 语言 1973 就诞生了,今天还在被广泛使用.. 主要的发明人都已经挂壁了,C 语言还在被用,
看这个样子 C 语言还要被用好几十年,看有没有被广泛替换的可能..

深耕下去很多东西都是老早就有老教授 老学究帮你们把基础给奠定完毕了,
哪怕是分布式里面的几个算法论文也是老早就发了,只是当时没有分布式应用的场景,
计算机性能又受限,没人搞罢了...
2020-11-30 11:46:22 +08:00
回复了 Ptu2sha 创建的主题 程序员 30 以后还能依靠技术吃饭吗
@laminux29 #35 你说这些说个半天,给 1 楼点个赞 让他受关注 不好嘛。
1 ... 23  24  25  26  27  28  29  30  31  32 ... 83  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   986 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 30ms · UTC 20:34 · PVG 04:34 · LAX 12:34 · JFK 15:34
Developed with CodeLauncher
♥ Do have faith in what you're doing.