V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  hxysnail  ›  全部回复第 16 页 / 共 16 页
回复总数  315
1 ... 7  8  9  10  11  12  13  14  15  16  
2021-07-20 08:51:24 +08:00
回复了 b0644170fc 创建的主题 Linux Linux 网络入门
推荐一个专栏,它从物理层开始介绍,写的非常浅显易懂,里面还有不少网络实验和网络编程例子,挺有趣的:

https://fasionchan.com/network/ethernet/physical-layer/
2021-07-08 08:53:17 +08:00
回复了 longmeier90 创建的主题 Python Python 起多个线程会充分用到多核 cpu 的资源吗
由于 GIL 全局锁的存在,Python 线程是没有办法利用到多核 CPU 的处理能力的。如果你的应用是计算密集型,需要充分利用多核处理器,建议开多进程。这里有篇文章可以参考一下: https://fasionchan.com/python-source/virtual-machine/gil/
2021-06-23 13:25:36 +08:00
回复了 TripleZ 创建的主题 程序员 求 V 友推荐个 Hugo 主题~
之前看了一圈没有找到合适的,所以就自己做了一个,感觉还行:

https://fasionchan.com/python-source/

其实只要懂一些前端知识,都可以自己设计主题。我觉得自己设计灵活性非常高,有什么想法都可以实现,哈哈
2021-05-21 09:56:56 +08:00
回复了 LeeReamond 创建的主题 Python Python 的 gil 到底解决了什么具体的问题?
GIL 目的在于保护 Python 虚拟机内部状态。举个例子,Python 很多变量空间,比如全局变量,内部是用 dict 来实现的。
变量的赋值,在 Python 内部最终是执行 STORE_NAME 字节码,这个字节码将变量的值,保存到对应的 dict 对象中。
假设这个动作底层是由字典的 dict.set(name, value)函数负责,它会非常复杂,还涉及 dict 对象扩容缩容,肯定不是线程安全的。

那怎么办呢?①dict.set(name, value)加锁;②用 GIL 保证同一时间只有一个线程在执行字节码。
Python 选择②,因为①引入的线程开销也不小。
有测试表明①虽然提升了 Python 的并行能力,但获得的性能提升非常有限,单线程下则全是消耗。

那为什么有 GIL 之后,多线程应用还需要加锁呢?
举个例子,有个全局变量 a,多个进程并发执行 a += 1 。
这个语句编译后大概会生成这样几个字节码:
1 LOAD_NAME 将变量从名字空间 dict 中取出,并保存在临时栈;
2 ADD 在临时栈中做加法操作;
3 STORE_NAME 将计算结果保存到名字空间 dict 中;
GIL 保证了线程在执行一个字节码时,其他线程不能执行,以便保护名字空间 dict 的安全性。

但这 3 个字节码之间可以任意切换,这样应用就会产生中间态。
举个例子,线程①执行 LOAD_NAME 后,切到其他线程执行,变量 a 发生了修改。
线程①恢复执行后,它临时栈中的值仍是旧的,这样就会覆盖了其他线程的写入。
因此,需要用户自行加锁,保存 a += 1 对应的这几个字节码的原子性,一次性执行,中间不能被打断。

总而言之,GIL 保证一个线程在执行字节码时,其他线程不能同时执行,目的是保护虚拟机内部状态的线程安全性;
用户自己加的锁,是为了让多条字节码成为一个原子操作,中间不会发生线程切换,目的在于保护程序逻辑的正确性,消除竞争态。

想要完全理解这个问题,需要了解 Python [内建对象] [虚拟机] [字节码] 等知识,有兴趣的话推荐看一个叫 [Python 源码剖析] 的专栏:
https://fasionchan.com/python-source/virtual-machine/gil/
2021-04-24 10:32:27 +08:00
回复了 jonathanchoo 创建的主题 Python 请教一个 Python 中 for in 列表修改值的问题
这个问题需要在 Python 对象模型中找答案,Python 对象都是通过指针引用的。Python 中的变量,可以理解成一个与变量名绑定在一起的对象指针。

case1 中,临时变量 v 引用列表保存的 dict 对象,然后对 dict 对象进行修改,也就是对列表中的对象进行修改。case2 中,临时变量一开始引用列表中保存的 string 对象,但后来修改临时变量将它指向一个新对象,列表引用的对象没有任何变化。

关于 Python 对象模型,可以参考这个系列: https://fasionchan.com/python-source/object-model/overview/
2020-12-03 17:21:20 +08:00
回复了 ditie 创建的主题 程序员 一个技术网站搞得像杂志的样子,真的好么?
个人不太喜欢这种风格,太花俏了。推荐语雀那样的风格,简单直白,符合技术人的风格。比如目前正在写的一个网络协议入门教程: https://www.yuque.com/coding-fan/network
2020-11-27 09:06:00 +08:00
回复了 AlohaV2 创建的主题 Python 《 Python 源码剖析》一书有续作么?
@fasionchan 看了你发的样章,写得确实不错,图画得超棒!赞赞赞!
2020-11-20 08:55:23 +08:00
回复了 zealinux 创建的主题 程序员 2020 年了,大家用什么软件进行知识管理?
语雀,发现它用来写知识库很香,这是我们在写的一个网络协议教程:
https://www.yuque.com/coding-fan/network
正需要这样的机会!赞!
2020-06-17 09:10:06 +08:00
回复了 fasionchan 创建的主题 程序员 小菜成长之路:警惕沦为 API 调用侠
受教了,文章写得真不错! ps: 向小菜和老板献上我的膝盖
2020-03-18 17:03:53 +08:00
回复了 Fasion 创建的主题 Python 用 Python 生成 HTML 表格
学习了,写得很好
1 ... 7  8  9  10  11  12  13  14  15  16  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5398 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 30ms · UTC 08:39 · PVG 16:39 · LAX 01:39 · JFK 04:39
Developed with CodeLauncher
♥ Do have faith in what you're doing.