Linux 进程与线程

 进程与线程

 

进程

进程就是在操作系统中运行的程序,是操作系统资源管理的最小单位。一个进程可以管理多个线程,线程相对轻量,可以共享进程地址空间

线程来源

一个进行在运行的过程中,不可能一直占据着CPU进行逻辑运算,中间很可能在进行磁盘I/O或者网络I/O,为了充分利用CPU运算资源,有人设计了线程的概念。线程最大的特点就是和创建它的进行共享地址空间
开多个进程提高CPU利用率的难点?缺点?
有人认为要提升CPU的利用率,开多个进程可以达到,但是开多个进程的话,进程间通信又是个麻烦的事情,毕竟进程之间地址空间是独立的,没法像线程那样做到数据的共享,需要通过其他的手段来解决,如管道等
 

线程

线程有内核线程、用户线程还有协程。一般操作系统都会分为内核态和用户态,用户态线程之间的地址空间是隔离的,而在内核态,所有线程都共享同一内核地址空间。
 

线程池

由来:不管是用户线程还是内核线程,和进程一样,均由操作系统的调度器来统一调度。所以开辟太多线程,系统调度的开销会很大,另外线程本身的数据结构需要占用内存,频繁创建和销毁线程会加大系统的压力
线程可以在初始化的时候批量创建线程,然后用户后续通过队列等方式提交业务逻辑,线程池中的线程进行逻辑的消费工作,这样就可以在操作的过程中降低线程创建和销毁的开销,但是调度的开销还是存在的

协程

由来:在多核场景下,如果是I/O密集型场景,就算开多个线程来处理,也未必能提升CPU的利用率,反而会增加线程切换的开销。另外,多线程之间假如存在临界区或共享数据,那么同步的开销也是不可忽略的。
协程是轻量级线程,在一个用户线程上可以跑多个协程,这样就可以提升单核的利用率。
协程不像进程或线程,可以让系统负责相关的调度工作,协程是处于一个线程当中的,系统无感知的,所以需要在该线程中阻塞某个协程的话,就需要手工进程调度
 
1. 多进程的出现是为了提升CPU的利用率,特别是I/O密集型运算,不管是多核还是单核,开多个进程必然能有效提升CPU的利用率。
2. 多线程是可以共享同一进程地址空间上的资源,为了降低线程创建和销毁的开销,又出现了线程池的概念。
3. 为了提升用户线程的最大利用率,又有了协程的概念。
 

进程的调度

1. 在一个CPU中,同一时刻最多只能支持有线的进程或线程同时运行(这取决于CPU核数量)。但是在一个运行的操作系统上往往可以运行很多进程,假如运行的进程占据进程时间很长,就有可能让其他进程饿死。为了解决这个问题,操作系统引入了进程调度器来进行进程的切换,目的是轮流让其他进程获取CPU资源
2. 在每个进程运行完毕时,系统可以进行调度的工作,但是系统不可能总是在等进程运行完才调度,不然其他进程估计还没被调度就饿死了。系统还需要一个重要的机制:中断机制,来周期性地触发调度算法进行进程切换

3. 需要进程切换的场景有以下几种:

  1. 该进程分配的CPU的时间片用完
  2. 该进程主动放弃CPU(例如IP操作,某些进程的工作大部分为IO操作,占据CPU空跑会导致资源浪费,这样的进程需要主动放弃CPU)
  3. 某一进程抢占CPU获得执行机会
  4. 一个进程在某一时刻只能存在一个CPU的运行队列里
 

Memcached线程池模型分析

Memcached是一款服务内存管理软件,它主要是由pthread创建的用户工作线程模型来处理主要逻辑的
1. mthread主线程,主要监听socket事件,并建立连接,然后把连接和相应的时间分发到cq连接队列中(每个分线程都拥有一个连接队列)
2. cthread分线程,用于从连接队列中获取连接的读写时间, 并进行业务逻辑的处理工作
3. Memcached在创建工作线程的时候,同样会用pipe管道调用创建管道,用于和主线程之间的通信
4. 在业务逻辑繁忙并且I/O开销比较大的情况下,多线程模型提高系统的吞吐率。但缺点是当多线程同时访问同一数据的时候就存在竞争,需要额外的并发解决开销(锁)
5. 加入系统中线程数量开得太多,那么线程切换的开销也会上升,需要根据实际场景谨慎设置线程池的大小
 

Nginx进程模型分析

Nginx只要创建CPU核心数量相等的工作进程,即可满足高并发、搞吞吐量的需求,原因是它的每个工作进程都有一个基于I/O多路复用的epoll池子,这样每个进程只有在事件被触发的场景下才进行工作,否则就会让出CPU进行其他事件的处理,特别是upstream的场景下,工作进程可以悠闲地等待后端数据准备好之后再进行工作,CPU的利用率也大大提升
在Nginx中master进程通过fork调用派生完子进程后,又通过socketpair创建了管理来进程父子进程之间的通信
 
 

posted @ 2021-01-11 23:42  将来-小志  阅读(184)  评论(0编辑  收藏  举报