多进程与多线程

进程:
    进程是系统资源分配的最小单位

父子进程的关系:
    1,关于资源,子进程除了代码段和父进程共享以外,其他的就是一个复制过来的副本,二者并不共享地址空间,两个是单独的进程,之后就没太多关系
    了,子进程单独运行。

    2,关于文件描述符,父子进程共享文件表项,一个进程修改,另一个进程也知道此文件被修改了。

线程与进程之间的关系:
    1,一个进程的所有线程都共享该进程获得的资源。
    2,各线程有属于自己的一小部分资源,就是栈空间,保存其运行状态和局部自动变量的。
    3,在线程中malloc等申请的空间都是占的进程的资源,即堆资源。

多进程通信方式:
    1,管道(无名管道,有名管道)
    2,信号
    3,共享内存
    4,消息队列
 

    管道:
        1,管道是半双工的,管道允许进程间按先进先出的方式传送数据
        2,无名管道只可在有亲缘关系的进程之间通信,有名管道则都可以
        3,管道的实质其实是一个内核缓存区,该缓存区可看作是一个循环队列
    
    消息队列:
        1,消息队列就是一个消息链表,是一系列保存在内核中消息的列表
        2,消息队列对于管道通信的优点就是可以按需要读取特定类型消息,不需要按队列次序

    共享内存:
        1,共享内存即允许两个或多个进程共享一个存储区,这段存储区进程可以映射至自身地址,大家共享这块存储区域
        2,共享内存,效率高,可直接读写内存不需任何数据拷贝,而管道,消息队列需要拷贝4次,共享内存只需2次
    
    信号:
        1,信号是Linux系统中用于进程之间通信或操作的一种机制,信号可以在任何时候发送给某一进程
        2,信号是软件层次上对中断机制的一种模拟,是一种异步通信方式
        3,信号事件来源,硬件来源,软件来源
        4,SIGKILL、SEGSTOP应用进程无法捕捉和忽略,这是为了使系统管理员能在任何时候中断或结束某一特定的进程。

线程:
    线程是程序执行的最小单位,即CPU调度的基本单位。

多线程同步:
    两个或两个以上的进程或线程在运行过程中协同步调,按预定的先后次序运行。比如 A 任务的运行依赖于 B 任务产生的数据

多线程互斥:
    一个公共资源同一时刻只能被一个进程或线程使用,多个进程或线程不能同时使用公共资源。

多进程与多线程的区别及优劣:
    1,进程是系统资源分配的最小单位,线程是程序执行的最小单位,即CPU调度的基本单位。
    2,进程创建开销大,线程创建开销小
    3,进程间通信比较麻烦,线程间通信比较方便
    4,多进程程序更加健壮,多线程出现某个线程挂掉导致整个业务挂掉,多进程有独立的地址空间,一个进程挂掉影响可能并不大。

IO多路复用:
    select    poll    epoll

    select和poll基本是差不多的,除了select有文件描述符限制(1024个),其他和poll没有太大区别。每次调用都需要将fd集合拷贝到内核态且
    遍历所有的fd,开销很大。

    epoll在注册新事件时就会把所有fd拷贝到内核,只需拷贝一次即可,epoll是只关心活跃的fd,通过回调机制提高效率。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值