zoukankan      html  css  js  c++  java
  • 操作系统:进程和线程+进程的通讯方式

    计算机资源=存储资源+计算资源
    计算资源:由系统分配,操作系统按照一定的规则来分配什么时候由谁来获得CPU的计算资源(CPU是计算单元,对输入的数据和指令进行计算)
    存储资源:就是内存,存储资源是操作系统管理和分配

    1.进程
    定义:一个程序在一个数据集上的一次运行
    /一个程序在多个数据集上/一个程序在同一个数据集上运行多次/是不同的进程

    进程的三种基本状态:
    1.就绪状态:除CPU外已分配所有资源,等待获得处理机执行
    2.执行状态:获得处理机,程序正在执行
    3.阻塞状态:因等待而无法执行,放弃处理机,处于等待状态。(等待I/O口完成,申请缓冲区不满足,等待信号等)

    2.线程:
    定义:进程中的一个实体(进程中一段程序片段)

    3.进程和线程的区别:
    内存空间:
    进程的内存空间是独立的,有独立的地址空间,不允许突破进程边界的存取其他进程的内存空间
    线程共享同一进程中的内存空间(共享的是进程代码段、进程的公有数据(利用这些共享的数据,线程很容易的实现相互之间的通讯)、进程打开的文件描述符、信号的处理器、进程的当前目录和进程用户ID与进程组ID)/(并且每个线程拥有自己的栈内存)

    隶属关系:
    线程属于进程,进程退出时结束所有线程,线程占用资源少于进程。

    多个执行执行:
    两个进程不能同时执行
    多个线程可以同时执行
    多线程程序只要有一个线程死掉,整个进程也死掉

    4.进程的通讯方式:5种
    管道:
    1.无名管道:
    数据只能在一个方向上流动
    用于具有亲缘关系的进程之间的通信
    特殊的文件,存在于内存

    2.命名管道:
    可以在无关的进程之间交换数据
    文件形式存在于文件系统write_fifo的作用类似于客户端,可以打开多个客户端向一个服务器发送请求信息,read_fifo类似于服务器,它适时监控着FIFO的读端,当有数据时,读出并进行处理,但是有一个关键的问题是,每一个客户端必须预先知道服务器提供的FIFO接口

    3.消息队列:
    消息的链表,存放在内核中。一个消息队列由一个标识符(即队列ID)来标识。
    消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
    (消息队列是面向记录的,其中的消息具有特定的格式以及特定的优先级。
    消息队列独立于发送与接收进程。进程终止时,消息队列及其内容并不会被删除。
    消息队列可以实现消息的随机查询,消息不一定要以先进先出的次序读取,也可以按消息的类型读取。)

    4.信号量:
    一个计数器,实现进程间的互斥与同步,而不是用于存储进程间通信数据。
    常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。主要作为进程间以及同一进程内不同线程之间的同步手段

    5.共享内存:
    两个或多个进程共享一个给定的存储区
    共享内存是最快的一种 IPC,因为进程是直接对内存进行存取。
    因为多个进程可以同时操作,所以需要进行同步。
    信号量+共享内存通常结合在一起使用,信号量用来同步对共享内存的访问

    五种通讯方式总结
    1.管道:速度慢,容量有限,只有父子进程能通讯
    2.FIFO:任何进程间都能通讯,但速度慢
    3.消息队列:容量受到系统限制,且要注意第一次读的时候,要考虑上一次没有读完数据的问题 ;信号传递信息较管道多。
    4.信号量:不能传递复杂消息,只能用来同步
    5.共享内存区:能够很容易控制容量,速度快,但要保持同步,比如一个进程在写的时候,另一个进程要注意读写的问题,相当于线程中的线程安全,当然,共享内存区同样可以用作线程间通讯,不过没这个必要,线程间本来就已经共享了同一进程内的一块内存

  • 相关阅读:
    Android应用基础概念
    Sqlserver Rand
    sqlite3 锁
    上海盛大网络浩方在线招聘网站程序
    代码片段
    泛型类型的返回
    招 .Net 网站程序员, Flash 程序员
    ACS 20070412 TODO
    MSSQL 2005 分页分析及优化
    虚惊一场
  • 原文地址:https://www.cnblogs.com/llcc/p/12908904.html
Copyright © 2011-2022 走看看