zoukankan      html  css  js  c++  java
  • 进程概念总结

    最近刚刚学习多进程,对于多进程的概念我自己总结一下

    每一个程序启动后都会在系统中产生一个进程来处理这个程序

    但是一个进程运行速度毕竟有限,在程序中有一些比较耗时的操作程序就只能是卡死的状态,为了解决这个问题,就出现了多进程。让耗时的工作创建一个子进程让子进程去工作,主进程运行自己的。
    但子进程多了也会出现问题:
    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进程此时等待解锁之后再进行操作此变量

  • 相关阅读:
    c++ list_iterator demo
    模板元编程例子
    !a && !b 和 !(a || b) 的故事
    简明解释算法中的大O符号
    重构oceanbase的一个函数
    正则表达式识别汉字
    编写易于理解代码的六种方式
    Linux下的tar压缩解压缩命令详解
    2013 年 —— Facebook 在开源方面的工作介绍
    Kent Beck揭秘Facebook开发部署流程
  • 原文地址:https://www.cnblogs.com/laolibk/p/8011742.html
Copyright © 2011-2022 走看看