学习周刊-第03期-第09周
# 前言
本周刊每周五发送,主要内容是我在每周看到的有价值的信息,目的是希望自己加强对优秀的内容深入的理解,另一方面好的内容想要分享出来,让更多的人看到。
# 工具
一个免费制作简历的平台
包含了上百项免费 API 提供使用。
# 项目
开源的私人博客,类似于 flomo,通过 docker 可以快速部署。
可以用来统计 github 上用户或者仓库的信息,可以通过超链接来展示。
# 文章
python 有三种启动进程的方式:
- spawn,父进程启动一个新的 Python 解析器,只继承 run 方法中需要的资源。
- fork,使用
os.fork
系统调用启动一个 Python 解析器,继承父进程的所有资源,但是如果父进程是多线程,fork 时有死锁的风险,详情参考:Why your multiprocessing Pool is stuck (opens new window) ,多线程不会被复制到子进程中。 - forkserver,向
fork server
发送指令,由它os.fork
子进程,而该fork server
是单线程,所有无该风险。
参考资料: python多进程实战 (opens new window) multiprocessing (opens new window)
作者使用 spawn 和 fork 两种方式创建 1000 个进程进行耗时测试,然后再创建 1000 个线程测试,结果如下:
方式 | 总共耗时 | 平均耗时 |
---|---|---|
spawn 方式进程 | 42.3 秒 | 42.3 毫秒 |
fork 方式进程 | 2.07 秒 | 2.07 毫秒 |
线程 | 0.048 秒 | 4.8e-05 秒(0.000048) |
结论:
- fork 要比 spawn 方式创建进程的速度要快 20 倍
- 创建线程比 fork 进程速度快 43 倍
- 如果程序需要创建许多的并发,考虑使用线程而不是进程,但是只适合 I/O 密集型任务。
作者做一个在 python 中比较进程和线程在共享数据方面的速度实验。
通过创建线程池和进程池排除创建进程和线程因素,又通过使用基本相同的 API 方式实现,减少其他因素的影响。
结论是线程传输数据的速度比进程快近 4 倍。原因也很简单,线程可以共享内存,而进程需要通过序列化、传输、接收、反序列化这些过程,增加了计算上的开销。
作者通过 ChatGPT 来排查 java 代码中的 Bug
没有人关心你是谁,你知道什么,你创造了什么。人们忙于自己的生活。他们迷失在自己的世界里。
你发行了世界上最棒的音乐专辑?没人在乎。
你花了两年时间写小说?没人在乎。
你制作了一个很棒的应用程序来解决一个大问题?没有人...
这正是营销的用武之地。
我们需要学会推销自己的产品,这是我们要解决的问题。
上次更新: 2024/03/07, 16:27:23