进程的基础概念

进程基础知识

什么是程序

程序就是一堆文件

什么是进程

一个正在执行的文件或程序(抽象的概念)

进程与程序的区别

进程是正在运行的程序

程序被谁执行

CPU最终运行程序

通过操作系统的调度作用,将磁盘上的程序加载到内存,然后交由CPU去处理,一个CPU正在运行一个程序,就叫开启了一个进程

串行

所有的进程由CPU一个一个的解决

并发

伪并行,即单个CPU,同时执行多个进程(一个CPU在多个进程间来回切换,看起来像是同时运行)

并行

多个CPU,真正的同时运行多个程序(如果程序数大于CPU数,就结合并发运行)

阻塞

遇到IO才叫阻塞(一个CPU同时运行两个进程,假设其中一个进程完全没有阻塞,也会强制切换)

非阻塞

没有IO

进程的三种状态

 

进程的创建

什么是开启多个进程

例如socket模块的server端和client端,就是两个进程

在python中,如果想开启多个进程,必须是通过一个主进程开启多个子进程

Linux和Windows创建多进程的区别

相同点

都是由主进程开启子进程,两个进程都有相互隔离独立的空间,互不影响

不同点

Linux中子进程空间的初始数据完全是从主进程copy一份

Windows中子进程空间的初始数据也是从主进程copy一份,但有所不同

开启多进程的两种方式

from multiprocessing import Process
import time

def task(name):
    print(f'{name} is running')
    time.sleep(3)
    print('GOAL!!!')

if __name__ == '__main__':  # windows环境下,开启多进程一定放在这个下面
    p = Process(target=task,args=('Messi',))  # args 一定是一个元组的形式.
    p.start()   # 通知操作系统,你给我在内存中开辟一个空间,将p这个进程放进去,然后让cpu执行.
    print('主进程')
通过函数(推荐)
from multiprocessing import Process
import time

class MyProcess(Process):

    def __init__(self, name):
        super().__init__()  # 必须要继承父类的__init__
        self.name = name

    def run(self):  # 必须定义run名字.
        print(f'{self.name} is running')
        time.sleep(3)
        print('SLAM DUNK!!!')

if __name__ == '__main__':  # windows环境下,开启多进程一定放在这个下面
    p = MyProcess('LeBron')
    p.start()   # 通知操作系统,你给我在内存中开辟一个空间,将p这个进程放进去,然后让cpu执行.
    print('主进程')
通过类(了解)

 

posted @ 2019-07-19 17:13  亚里士多缺德  阅读(189)  评论(0编辑  收藏  举报