大部分编程语言,都绕不开并发的话题,小项目基本单线程或单进程可以轻松胜任,但某些场景下我们不得不考虑使用多线程或多进程来提升处理任务的速度或提升并发了。如,爬虫要爬取10000个网站,python要同时处理1000个word文档,django同时要在短时间内给10000个用户发送邮件。瞧,这都是耗时的任务,如果单线程或单进程处理会变得非常慢。
进程与线程的关系
进程是一个资源单位,线程是在该资源单位下工作的任务执行者,很多老师都喜欢用以下这个例子来做类比,我觉得太恰当了。
什么是CPU密集型和IO密集型
面对开发任务时如何选择
Python为什么会有GIL(Global Interperter Lock)的存在
python在设计时为了解决多线程之间数据完整性和状态同步的问题,引入了Lock的概念,引用锁锁住计数器,来实现对对象的管理,加入线程A和线程B同时都引用了对象C,两者同时都要修改对象C的某个属性,那到底是以线程A修改的为准呢,还是以线程B修改的为准?此时,谁先获得了锁,谁就能先修改,修改完成,释放锁,另一个线程获得锁时,才能修改对象C的属性。