V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  fasionchan  ›  全部回复第 4 页 / 共 6 页
回复总数  112
1  2  3  4  5  6  
2020-08-31 16:26:34 +08:00
回复了 yezhifei241 创建的主题 程序员 一个计算机小白对于职业规划与必备技能的咨询
so easy. 看看计算机专业都有哪些基础课,一门门啃下来就是一个合格的程序猿了。别老是整什么新编程语言,语言只是冰川一角。
再造轮子,自制一个协程库,你就什么都明白了~

我写过一个 100 行左右的协程库,虽然是个玩具,对理解协程运行机制应该很有帮助,gist 地址如下:

https://gist.github.com/fasionchan/48d595b2e77b82f44ad92fc419543a41

例子来自我写的专栏《 Python 源码深度剖析》,里面有详细讲解: https://www.imooc.com/read/76
专栏是付费的,不过有几篇是免费的,还可以自己选一篇试读。可以选择试读《再造轮子:手把手教你设计协程库》这篇,里面完整介绍了协程的运行机制、协程库设计思想以及示例协程库代码解析。
2020-08-21 17:13:59 +08:00
回复了 ng29 创建的主题 程序员 操作系统问题,关于函数地址空间
@ng29 hook 一般不是定义新函数,新函数调用就函数,程序编译时连接新函数吗?之前看过微信后台的协程库 libco 的源码,里面 hook 了所有阻塞型的系统调用,你可以参考一下: https://github.com/Tencent/libco,可能会有一些启发。
2020-08-21 17:06:45 +08:00
回复了 ng29 创建的主题 程序员 操作系统问题,关于函数地址空间
@ng29 不过这样做的意义何在,做实验?
2020-08-21 17:06:02 +08:00
回复了 ng29 创建的主题 程序员 操作系统问题,关于函数地址空间
@ng29 栈地址是通过 ebp 寄存器加上偏移量计算的,应该没影响;堆地址和静态全局变量都是完整地址,应该也没影响;而 if for 语句编译后的 jmp 指令是段内跳转,通过偏移量来进行,讲道理也不会有影响。具体你可以试试看,我好些年没做底层了,可能有错漏~
2020-08-21 16:53:26 +08:00
回复了 ng29 创建的主题 程序员 操作系统问题,关于函数地址空间
不行,malloc 出来的内存页是没有执行权限的。为什么呢?因为有一攻击叫栈溢出攻击。
2020-08-05 08:44:19 +08:00
回复了 CNife 创建的主题 Python Python 的 for 和 while 循环为什么没有引入新的作用域?
@sixway 闭包不是问题的根源,相反它是受害者。循环没有独立作用域,会导致很多非预期的行为,在循环中定义的闭包函数就是典型的一例。Python 中变量的行为跟 JavaScript 中 var 定义的变量一样,都是函数作用域。但 JavaScript 后来引入 let 和 const 关键字,作用域缩小到代码块,这样闭包就不会有非预期行为了。
2020-08-03 15:08:26 +08:00
回复了 baishuigansijun 创建的主题 Python PyObject 能访问 PyLongObject 内容么
如果你确定它是一个 PyLongObject,那么你可以将 PyObject 指针强制转换成 PyLongObject 指针,这样就能访问了。另外,PyLongObject 里面不是保存一个 int 值,而是通过 int 数组实现的大整数,它的表示访问比 int 大的多。

我写的《 Python 源码剖析》专栏中有两个下节专门介绍这个:

- int 对象,永不溢出的整数
- int 源码解析:如何实现大整数运算?

有兴趣可以看看,地址是: https://www.imooc.com/read/76
2020-08-03 15:02:45 +08:00
回复了 smallpython 创建的主题 Python 在 python3 中, 字节流如何转换成字符串
1 楼说的就是答案,推荐看一些关于 bytes 对象、str 对象以及文本编码的材料:

文本编码: https://python.fasionchan.com/zh_CN/latest/practices/coding.html
str 对象: https://mp.weixin.qq.com/s/E7z2yN8V9ac2pUTfgqDg9Q
2020-07-28 13:52:52 +08:00
回复了 gantleman 创建的主题 程序员 我们来为“死锁的四个必要条件”加一条
@gantleman @aeon113 他已经把话说得很清楚了,至少我得看明白,应该不算话说一半……前面我好像也提过,你这个方案本质就是串行化,可能适用于少量特定的场景,但在我认知的范围内,看不到普适性。就像如果数据库串行化真的好使,那些大神们何必去折腾各种隔离级别和多版本并发呢?
@qybing 意思是线程不退出吗?
@SjwNo1 不是,字节码不会直接转换成机器码,而是由虚拟机解释执行。虚拟机内部是一个由 C 实现的 for 循环,逐个遍历待执行字节码; for 循环每次迭代是一个巨大的 switch case,针对不同字节码执行对应的处理逻辑。
2020-07-28 08:09:49 +08:00
回复了 leavelet 创建的主题 Python 有什么 Python 代码编译成单独软件的好方法?
比 pyinstaller 之类的现成工具比,好在哪里呢?
内存是否增加取决于对象创建以及销毁,跟多线程无关。如果你一直创建对象,但不回收,内存肯定是要增加的。
2020-07-27 18:58:52 +08:00
回复了 qybing 创建的主题 Python Python 多线程问题
你应该通过某种机制,发一个消息给想要关闭的线程,它接到消息后自动退出。推荐看看 Queue
2020-07-27 16:23:27 +08:00
回复了 gantleman 创建的主题 程序员 我们来为“死锁的四个必要条件”加一条
@gantleman 确实没看过代码不好评论,也许你可以用示意图后者其他直白的手段将思想描述出来。

我没看过代码,这么短的时间也不可能深入去看,从文字介绍,我总结出了这样的结论:将有可能产生死锁死锁的任务挑出来,放在一个线程里面串行执行。说白了就是用串行解决死锁问题,不知道我又没有理解对。如果是我理解的这样,操作系统书也介绍过吗,只不过将其当做一个不那么好的方案来引出其他方案。

另外,其他人也提到了任务提交顺序问题,解决起来也是相当棘手的,也不知道你是怎么解决的?
2020-07-27 15:55:38 +08:00
回复了 gantleman 创建的主题 程序员 我们来为“死锁的四个必要条件”加一条
@gantleman 那就没必要这么兴奋了,好像改变了世界?我不否认这个思路在某些场景可以起作用,如果这么简单的想法就可以解决大量复杂的工程问题,应该早就有前辈搞出来了吧?轮不到你我在这讨论。
1  2  3  4  5  6  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   822 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 25ms · UTC 22:06 · PVG 06:06 · LAX 15:06 · JFK 18:06
Developed with CodeLauncher
♥ Do have faith in what you're doing.