第24讲 | 不可忽视的多线程及并发问题
蔡能
该思维导图由 AI 生成,仅供参考
既然我们说到了服务器端的开发,我们就不得不提起多线程和并发的问题,因为如果没有多线程和并发,是不可能做网络服务器端的,除非你的项目是 base 在 Nginx 或者 Apache 之上的。
多线程和并发究竟有什么区别和联系?
提到并发,不得不提到并行,所以我就讲这三个概念:并发、并行,以及多线程。作为初学者,你或许不太明白,多线程和并发究竟有什么区别和联系?下面我们就分别来看看。
并发出现在电脑只有一个 CPU 的情况下,那如果有多个线程需要操作,该怎么办呢?CPU 不可能一次只运行一个程序,运行完一个再运行第二个,这个效率任谁都忍受不了啊!所以,就想了个办法。
CPU 将运行的线程分成若干个 CPU 时间片来运行。不运行的那个线程就挂起,运行的时候,那个线程就活过来,切换地特别快,就好像是在同时运行一样。
你可以想象这个场景,有一个象棋大师,一个人对十个对手下棋,那十个人轮流和他下。大师从 1 号棋手这里开始下,下完 1 号走到 2 号的棋手面前,下 2 号棋手的棋,一直轮流走下去,直到再走回 1 号棋手这里再下一步。只要象棋大师下象棋下得足够快,然后他移动到下一位棋手这里又移动得足够快,大家都会觉得好像有十位象棋大师在和十个对手下棋。事实上只有一位象棋大师在下棋,只是他移动得很快而已。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文深入探讨了多线程和并发在服务器端开发中的重要性,以及Python在利用多线程时可能遇到的问题和解决方法。文章首先介绍了并发、并行和多线程的区别,强调了多线程在单个CPU情况下的作用,以及多线程在单个进程内共享资源的特点。然后,文章指出了Python在利用多个CPU时可能出现的问题,即全局解释锁(GIL)的存在导致多线程无法并行执行。为了解决这一问题,文章提出了使用多进程包或将关键部分用C/C++写成Python扩展的方法。此外,文章还通过代码比较展示了单线程和多线程在计算密集型任务中的差异。最后,文章指出了Python的GIL问题是由实现语言的差异造成的,并且提到了使用Java写成的Python和.NET下的Python并不存在这一问题。总的来说,本文内容深入浅出,为读者解释了多线程和并发的概念,以及Python在多线程利用上的问题和解决方法。文章内容涵盖了技术概念的解释和解决方案的提出,对于需要了解多线程和并发在服务器端开发中的读者具有一定的参考价值。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《从 0 开始学游戏开发》,新⼈⾸单¥59
《从 0 开始学游戏开发》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(2)
- 最新
- 精选
- 放羊大王监听信号量,重新 fork 。加锁什么是最烦的,go的sync包,现在都还没搞懂。能讲讲 ipc 通信方式与具体最小实现,伪代码也行, 以及 actor 和 csp 。我看 elixir 也不错,就是用的人少。 哎!感觉多线程其实就是运行同一份代码,通过if判断运行逻辑于是就有了master worker。2018-08-084
- Stone请问为什么在多核CPU上做不到数百次间隔检查才会导致一次线程切换? 引用: “在单核的 CPU 上,数百次间隔检查才会导致一次线程切换。在多核 CPU 上,就做不到这些了。”2022-05-201
收起评论