最近刚刚学习多进程,对于多进程的概念我自己总结一下
每一个程序启动后都会在系统中产生一个进程来处理这个程序
但是一个进程运行速度毕竟有限,在程序中有一些比较耗时的操作程序就只能是卡死的状态,为了解决这个问题,就出现了多进程。让耗时的工作创建一个子进程让子进程去工作,主进程运行自己的。
但子进程多了也会出现问题:
1、孤儿进程
2、僵尸进程
但是使用多进程的时候又出现了进程之间数据共享的问题,这时候进程间的通信就需要解决。目前知道的解决办法是用:
1、文件
2、管道
3、队列
4、共享内存
以上数据共享类型的区别在于:
管道:操作起来麻烦,读的时候不能写。写的时候不能读。如果在写的时候不关闭读操作,在读的时候可能会出现问题
队列:操作简单,一般推荐使用。
共享内存:共享内存与(管道、队列)区别在于,管道和队列在创建时需要单独在内存中开辟一块空间进行操作。而共享内存则不需要单独开辟空间读写更快捷
在多进程间,又会产生进程间数据错误的问题,原因是两个进程访问一个变量最终的结果改变会出现问题如:
A、B进程 访问 共享内存 a1 = 10
A进程的操作是将a1的值减1
B进程的操作是将a1的值加1
此时两个进程同时访问a1变量
在A进程没有改变a1值得情况下B进程已经获取到了a1的原始值 10 此时B进程改变a1的值就会覆盖A进程改变后的值9
此时a1的值为11
为了进程间访问变量互斥的问题就需要有序的操作变量(加锁):
互斥:在A进程操作a1变量的时候加一个锁,B进程此时等待解锁之后再进行操作此变量