简单地说,就是操作体系可以同时运行多个使命。打个比方,你一边在用浏览器上网,一边在听MP3,一边在用Word赶作业,这就是多使命
现在,多核CPU已经非常遍及了,但是,即使已往的单核CPU,也可以执行多使命。由于CPU执行代码都是顺序执行的,那么,单核CPU是怎么执行多使命的呢?
答案就是操作体系轮流让各个使命交替执行,使命1执行0.01秒,切换到使命2,使命2执行0.01秒,再切换到使命3,执行0.01秒……这样反复执行下去。表面上看,每个使命都是交替执行的,但是,由于CPU的执行速度实在是太快了,我们感觉就像所有使命都在同时执行一样。
multiprocessing模块就是跨平台版本的多进程模块,提供了一个Process类来代表一个进程对象,这个对象可以理解为是一个独立的进程,可以执行另外的事情
在多进程编程中,不同的进程之间必要举行通信。multiprocessing模块提供了多种进程间通信的方式,例如使用队列、管道、共享内存等 进程通信
生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯,而通过壅闭队列来举行通讯,所以生产者生产完数据之后不消等候消费者处理,直接扔给壅闭队列,消费者不找生产者要数据,而是直接从壅闭队列里取,壅闭队列就相当于一个缓冲区,均衡了生产者和消费者的处理能力。这个壅闭队列就是用来给生产者和消费者解耦的。
当必要创建的子进程数量不多时,可以直接利用multiprocessing中的Process动态成生多个进程,但如果是上百甚至上千个目标,手动的去创建/销毁进程的工作量巨大,此时就可以用到multiprocessing模块提供的Pool方法
解决多线程资源竞争问题,最简单的机制就是引入互斥锁,互斥锁为资源引入一个状态:锁定/非锁定
某个线程要更改共享数据时,先将其锁定,此时资源的状态为“锁定”,其他线程不能更改;直到该线程释放资源,将资源的状态变成“非锁定”,其他的线程才能再次锁定该资源。互斥锁保证了每次只有一个线程举行写入操作,从而保证了多线程环境下数据的准确性。
线程池是一个线程管理技术,创建一个大概多个线程举行管理,避免线程的创建和销毁带来的开销线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等候着监视管理者分配可并发执行的使命。这避免了在处理短时间使命时创建与销毁线程的代价。线程池不仅能够保证内核的充实利用,还能防止过分调度.
随着主进程代码执行结束,保卫进程结束, 可以理解为子进程开启保卫进程以后,主进程为子进程的运行保驾护航;当主进程结束,没有保卫以后,子进程立刻就会结束;
在主线程代码执行结束后,等候其它非保卫子线程执行结束,保卫线程立即结束;即主线程只会等候非保卫线程结束,不会等候保卫线程执行完毕,只要主线程代码执行结束,保卫线程就会结束。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) | Powered by Discuz! X3.4 |