V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  GeruzoniAnsasu  ›  全部回复第 125 页 / 共 148 页
回复总数  2960
1 ... 121  122  123  124  125  126  127  128  129  130 ... 148  
2019-01-22 15:46:55 +08:00
回复了 thomaswang 创建的主题 程序员 用户态/内核态和线程模型
然后,线程的确还分为只在内核中执行的线程以及包含了用户空间代码的线程,你可能是混淆了这两种内核线程 /用户线程?

就 linux 来说,它的内核可以看做是单线程的,所以所谓的“内核线程”更像是内核中的协程,毕竟没有更上层的结构去切换上下文,必须自行实现多路复用。内核线程是无法中断的,一旦某个内核线程中有死循环,那么整个内核+用户空间的所有线程都会挂掉。这与多对多的线程模型没有关系,是另一个层面的东西
2019-01-22 15:42:59 +08:00
回复了 thomaswang 创建的主题 程序员 用户态/内核态和线程模型
@thomaswang 前面不是说了,只要是原生的线程必定是需要内核来实现切换的,而进程只不过是一组线程的集合,硬件时间中断->进入内核->调度线程->切换回用户空间->执行用户空间代码->时间中断,这是一个循环。你可能以为写的所有代码都是 ring3 的用户代码,不需要进入内核空间,可现在的情况是,线程本身就是内核中的一个结构,并且用户代码也是需要内核来帮助切换执行的
2019-01-22 15:35:10 +08:00
回复了 garlics 创建的主题 问与答 使用逻辑运算符代替 if 判断函数执行条件会不会被打?
@sosilver 试完发现我说错了
go 的下限刚好在 “写出没法用的代码”以上 意味着 golang 不管多傻逼的人来写,只会写出逻辑 bug,不会写出调试不了不科学不能跑的代码

c++,嚯,那就不一样了,没人知道自己写的代码对不对,只知道“在特定情况下似乎不会崩”
2019-01-22 15:03:55 +08:00
回复了 linora 创建的主题 问与答 静电⚡️⚡️⚡️⚡️⚡️⚡️!!!!!
一手扶墙一手摸金属。。
我现在天天摸着墙走路。。。
2019-01-22 14:57:57 +08:00
回复了 garlics 创建的主题 问与答 使用逻辑运算符代替 if 判断函数执行条件会不会被打?
拿 c++来说,这种写法有个很严重的问题就是求值要先于运算符

https://zh.cppreference.com/w/cpp/language/eval_order
2) 任何运算符的运算数的值计算(但非副效应)先序于运算符结果的值计算(但非副效应)。

&& 右边的 sucess()函数必定会先调用,得出结果后,才会进行&&比较,而如果 success 是个 void 类型,此处甚至无法编译,所以 C/JAVA 里不可能见到这种写法,语义上都无法成立


只在 shell 脚本里见过 [ xxx ] && do_sth
2019-01-20 00:55:01 +08:00
回复了 Litecoins 创建的主题 Python 断点调试装饰器遇到的疑问疑问🤔️
@xpresslink 是语法糖,但装饰器相当于一个赋值语句,在执行流中的位置还是比较明确的

@register 相当于 f1 = register(f1),执行到这行时,在装饰器函数内部下断应该是可以断下来的

在 12 行下断只有在执行 f1()时才会中断
2019-01-18 19:37:22 +08:00
回复了 linkMessage 创建的主题 奇思妙想 想做一个只能加 7 个好友的社交软件,有人用吗?
没用,好友几百个,会私聊的数量为 0

就算限制好友数量为 1

对我来说都没有任何区别,群组才是社交生命力
2019-01-17 19:48:41 +08:00
回复了 thomaswang 创建的主题 程序员 用户态/内核态和线程模型
@thomaswang 操作系统提供的原生线程,是由内核实现的,当发生时钟中断,内核的终端处理流程会切换线程上下文并调度到另一个线程继续执行;原生线程是必须依赖硬件和内核共同工作的,也就是你说的“内核线程”

一般来说一个原生线程只干一件事,但有时候不满足需要

现在不考虑原生线程,假设你要在一个单一线程里模拟同时执行多个任务能实现吗
—— 是可以的,比如实现一个虚拟机:

def main_loop():
..for t in tasks:
....c = next(task.codes)
....ctx = task.context
....exec_opcode(c,ctx)

取得每个 task 的下一条指令,执行一遍然后马上返回主循环,每个 task 中执行流都会往下走,但这都完全发生在同一个线程里

当然拆到这么细粒度需要的代价非常大(实现虚拟机过于复杂而且慢得很)刚好很多语言提供了协程或者撸协程用的 feature,比如 yield:

def fake_sleep():
..yield

def thread1():
..while True:
....print('thread1')
....yield from fake_sleep()

def thread2():
..while True:
....print('thread2')
....yield from fake_sleep()

while True:
..for t in [thread1(),thread2()]:
....t.send(None)

每一个 fake_sleep 都是调度点,此时我们就可以把 thread1 和 thread2 看做是“线程”(协程),在一段时间内这两个函数会“并行”执行然后交替输出 thread1/thread2

于是我们就可以用协程来模拟多任务并行了,只不过需要手动实现切换 task 的代码

以上你已经了解了 用户线程内核线程 1:1 以及 N:1 的模型
那么任意比例的模型也就是把若干个 N:1 模型放进几个真正的原生线程里而已,当然其中复杂度和涉及的细节都会多很多,此处不展开



可以看到这几种模型其实跟内核代码怎么切换根本就没什么关联,是两种意义层次
@onyourroad

> 如果可以没有这些麻烦事,我宁愿找个小公司去当程序员,一点一点努力升职。

这个小公司的程序员最终花了 10 多年好不容易年薪 20w 然后一波寒冬被裁再也没有公司要


你期望哪种结果
2019-01-17 10:48:15 +08:00
回复了 eagleweb 创建的主题 问与答 学习编程,先学习函数后学习变量顺序是否正确?
@eagleweb 为什么不按照书的进度来?
连子过程的概念都还没有让人上哪去理解函数,特别是,“参数”是什么鬼东西
学编程先从照猫画虎写得出能跑的东西开始
然后才继续认识各种语法成分和特性
2019-01-16 20:29:27 +08:00
回复了 eagleweb 创建的主题 问与答 学习编程,先学习函数后学习变量顺序是否正确?
先学怎么输入输出

学变量是什么鬼东西,都不明白你想表达什么
2019-01-16 14:44:13 +08:00
回复了 thomaswang 创建的主题 程序员 用户态/内核态和线程模型
系统调用切换到内核态只是会运行内核中的代码而已,线程还是线程,可以说是两个方面的东西,没什么联系可言

我猜 lz 可能是对内核到底是怎么工作的怎么与用户态协同有疑问?
2019-01-15 16:34:55 +08:00
回复了 oakland 创建的主题 程序员 求学数学知识的资源
https://space.bilibili.com/88461692
B 站学数学真不是笑话
当然 3b1b 只能算是个科普频道,重拾兴趣还可以,不能当教科书看
2019-01-14 19:44:39 +08:00
回复了 pourquoi 创建的主题 程序员 高三狗一枚,如果想走程序员这条路的话应该选什么专业?
首先
计算机科学和数学是完全不同的两个学科
就跟物理和数学是完全不同的两个学科一样
即使他们有多么深的渊源和联系,这两门学科关注的东西也是完全不同的,请务必先搞清楚这一点

如果你的兴趣是写代码而不是数学,那么就不要去理学院数学系,如果兴趣是数学,就不一定要先考虑计算机。
同样是数学
数学系是,写程序算数
计算机系,是,寻求数学和实践的相互实现,比如用数学证明构建工程系统,或者用数学证明系统的某项特性
显然
学了数学,再怎么编程都是为了算数
学计算机,再多数学也是为了去构建系统

千万别盲信去什么数学系,你先搞清楚自己是不是喜欢数学其它都无所谓


然后
还有必须要明确的一点是,搞竞赛的编程,和普遍意义的编程也是完完全全两码事
不如说竞赛写的代码才是玩具
学习数字电路,体系结构,操作系统,编译原理,甚至只是学会各种前后端框架、命令、配置文件、语言写法要花的功夫都一点也不比 ACM 拿个牌子少,一进大学肯定会有很多人忽悠你,哎呀有竞赛基础呀,编程不就是刷题嘛,校队选拔不来一发?然后发现自己浪费一年出不了成绩怀疑学这行有啥卵用——其实都还没开始学
后面还有一个月一代的新框架,一个版本一变的新语言,一个环境一份的代码,甚至还有项目管理啊,设计啊,心理学啊,八门遁甲啊,时尚啊,养生啊,等等各种莫名其妙你从前根本考虑不到的但确实真的相关的杂七杂八的东西等着你,所以别先把写代码跟竞赛题绑死了

再然后就可以选专业了
计科的面最宽,也提供了所有必要的基础知识,凡是写代码一定会涉及到计科的课,然后什么信安啊网工啊软工啊其实都差不太多,反正基本上小专业的专业课

全都没用
只有计科的专业课是有且一定有且必修的

既然你想写代码,那何妨就去计科
既然不去计科也没所谓,何妨随便选一个
2019-01-14 15:39:36 +08:00
回复了 chengkai1853 创建的主题 程序员 自定义类似二维码的东西可行么?
我意思是可行但是没什么意义
即使每个手机的相机分辨率都能达到紫外线激光器级

—— 往大街上贴一张蓝光光盘,然后让大家扫“码”
这样的“大信息量的二维码”,要用来传递些什么信息呢?
到底能比扫出一个网址多出多少意义?
2019-01-14 11:51:01 +08:00
回复了 chengkai1853 创建的主题 程序员 自定义类似二维码的东西可行么?
https://www.v2ex.com/t/526826
这地址就这么短
妨碍你写这么多字吗
2019-01-12 17:09:56 +08:00
回复了 GhostRider 创建的主题 C C++ 动态链接库问题
0. 如果 dll 不能动态加载来用,建议直接放弃折腾用厂商给的标准方案

1. 先看一眼 dll 的导出表,看命名修饰,如果都是 c style 函数,那其实挺好办,如果是 c++,如果有导出类,建议放弃折腾老老实实用厂商的标准解决方案,如果只是导出函数,也就名字长一点,封装一下就行

2. qt 一样可以直接用 windows native api 绕过 posix 那层逻辑来加载 dll/调用函数,反正调用的时候符合 dll 导出函数的约定就行
2019-01-11 14:49:05 +08:00
回复了 BigPig666 创建的主题 程序员 又到了间歇性失落状态,各位老哥怎么度过的?
最好别让自己产生任何正面负面的感悟,因为正反情绪会相互反馈,导致出现你前一秒还在感慨世界真好后一秒就“可我为什么这么惨”或者“世界真冷酷”然后直接变成了“待我亦如此”

拉朋友开黑打游戏就完事了
1 ... 121  122  123  124  125  126  127  128  129  130 ... 148  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3346 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 51ms · UTC 10:44 · PVG 18:44 · LAX 02:44 · JFK 05:44
Developed with CodeLauncher
♥ Do have faith in what you're doing.