进程:
进程是系统资源分配的最小单位
父子进程的关系:
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,通过回调机制提高效率。