暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

学习周刊-第03期-第09周-进程与线程的对比测试

编程黑洞 2023-03-03
473

前言

本周刊每周五发送,主要内容是我在每周看到的有价值的信息,目的是希望自己加强对优秀的内容深入的理解,另一方面好的内容想要分享出来,让更多的人看到。

工具

  • • 91化简[1]

一个免费制作简历的平台

  • • 免费API[2]

包含了上百项免费 API 提供使用。

项目

  • • memos[3]

开源的私人博客,类似于 flomo,通过 docker 可以快速部署。

  • • code-statistic[4]

可以用来统计 github 上用户或者仓库的信息,可以通过超链接来展示。

文章

  • • Processes Are About 40x Slower Than Threads in Python(进程比 Python 中的线程慢大约 40 倍)[5]

python 有三种启动进程的方式:

  1. 1. spawn,父进程启动一个新的 Python 解析器,只继承 run 方法中需要的资源。

  2. 2. fork,使用 os.fork
     系统调用启动一个 Python 解析器,继承父进程的所有资源,但是如果父进程是多线程,fork 时有死锁的风险,详情参考:Why your multiprocessing Pool is stuck[6] ,多线程不会被复制到子进程中。

  3. 3. forkserver,向 fork server
     发送指令,由它 os.fork
     子进程,而该 fork server
     是单线程,所以无该风险。

参考资料: python多进程实战[7] multiprocessing[8]

作者使用 spawn 和 fork 两种方式创建 1000 个进程进行耗时测试,然后再创建 1000 个线程测试,结果如下:

方式总共耗时平均耗时
spawn 方式进程42.3 秒42.3 毫秒
fork 方式进程2.07 秒2.07 毫秒
线程0.048 秒4.8e-05 秒(0.000048)

结论:

  1. 1. fork 要比 spawn 方式创建进程的速度要快 20 倍

  2. 2. 创建线程比 fork 进程速度快 43 倍

  3. 3. 如果程序需要创建许多的并发,考虑使用线程而不是进程,但是只适合 I/O 密集型任务。

  • • Threads are 4x Faster at Sharing Data Than Processes in Python[9]

作者做一个在 python 中比较进程和线程在共享数据方面的速度实验。

通过创建线程池和进程池排除创建进程和线程因素,又通过使用基本相同的 API 方式实现,减少其他因素的影响。

结论是线程传输数据的速度比进程快近 4 倍。原因也很简单,线程可以共享内存,而进程需要通过序列化、传输、接收、反序列化这些过程,增加了计算上的开销。

  • • 你好 ChatGPT, 帮我看下这段代码有什么问题?[10]

作者通过 ChatGPT 来排查 java 代码中的 Bug

  • • No one cares[11]

没有人关心你是谁,你知道什么,你创造了什么。人们忙于自己的生活。他们迷失在自己的世界里。

你发行了世界上最棒的音乐专辑?没人在乎。

你花了两年时间写小说?没人在乎。

你制作了一个很棒的应用程序来解决一个大问题?没有人...

这正是营销的用武之地。

我们需要学会推销自己的产品,这是我们要解决的问题。

引用链接

[1]
 91化简: https://91huajian.cn/
[2]
 免费API: https://api.aa1.cn/
[3]
 memos: https://github.com/usememos/memos
[4]
 code-statistic: https://github.com/zmh-program/code-statistic
[5]
 Processes Are About 40x Slower Than Threads in Python(进程比 Python 中的线程慢大约 40 倍): https://superfastpython.com/processes-slower-than-threads/
[6]
 Why your multiprocessing Pool is stuck: https://pythonspeed.com/articles/python-multiprocessing/
[7]
 python多进程实战: https://jeremyxu2010.github.io/2020/09/python%E5%A4%9A%E8%BF%9B%E7%A8%8B%E5%AE%9E%E6%88%98/
[8]
 multiprocessing: https://docs.python.org/zh-cn/3/library/multiprocessing.html
[9]
 Threads are 4x Faster at Sharing Data Than Processes in Python: https://superfastpython.com/threads-vs-processes-share-data/
[10]
 你好 ChatGPT, 帮我看下这段代码有什么问题?: https://www.wdbyte.com/java/chatgpt-files-list.html
[11]
 No one cares: https://rohit.blog/care/




文章转载自编程黑洞,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论