美文网首页
进程,线程,协程在服务器中如何正确使用

进程,线程,协程在服务器中如何正确使用

作者: shop271 | 来源:发表于2018-11-18 12:38 被阅读0次

老话长谈,先说明下进程,线程,协程的概念

进程:

  • 进程是系统资源分配和调度的基本单位,是线程的容器,对于linux系统来说用PID来标识进程。
  • 进程拥有自己的资源,它有自己的地址空间,会包括代码,数据,堆栈段(代码段存储处理器执行的代码,数据段存储变量和进程执行期间使用动态分配的内存,堆栈段存储活动过程中调用的指令和本地变量)


    image

    -进程是执行中的程序,也就是操作系统运行程序的时候产生。我们说其是一个进程

多进程适用场景:
web服务,游戏,等需要数据和错误隔离的场景
(python程序中因为GIL锁的存在,对于计算密集的程序必须要使用多进程才能利用上多CPU)

线程:

  • 线程是cpu执行的最小单位,每个进程至少有一个线程,进程会为自己的线程分配id标识。
  • 线程不拥有系统资源,只拥有运行时候的一些资源。单进程多线程时候共享进程的资源,所以之间会相互制约
    ,线程也有就绪阻塞运行三种基本状态
  • 线程提供较轻的上下文切换开销 ,不用切换地址空间,不用更改寄存器,不用刷新TLB。
    总线程数<= CPU数量:并行运行
    总线程数> CPU数量:并发运行
    多线程适用场景:
    线程间有数据共享,并且数据是需要修改的。
    单任务并行计算,在非CPU Bound的场景下提高响应速度,降低时延。
    与人有IO交互的应用,良好的用户体验(键盘鼠标的输入,立刻响应)。

协程:

  • 协程属于用户在单线程里面控制程序执行顺序,也叫做用户态线程。
  • 主要用在IO等待和时钟阻塞上面。利用了程序wait时间将程序挂起然后执行其他程序更好的利用CPU时间片和更轻的上下文管理

web服务器中程序应用性能指标

qps:一秒钟内完成的请求数量
rt: 一个请求完成的时间
Tic: 线程的cpu计算时间
Tiw:线程的等待时间(io/网络/锁)
Tn: 线程数
Tno:最佳线程数
Cn:cpu核数
Cu:cpu使用率

rt = Tic + Tiw
qps = 1000/rt
最佳线程数
Tno = (Tic+Tiw)/Tic
现代计算机都是多核
qps = (1000/rt)CnCu
使用多线程时候
qps =1000* Tn(Tic+Tiw)Cn*Cu/Tic
可以看到qps的大小只和Tc成反比,也就是说要增大qps只要减小Tic就可以了。

Cic:协程执行时间
Ciw:协程阻塞等待时间
Cno:协程最佳数量
协程计算公式 其实和线程一样(只是协程只适用于IO和时钟阻塞,因为受限于线程。它相当于在单一CPU上运行)
Cno = (Cic+Ciw)/Cic

所以python程序一般使用多进程和多协程一起使用较好。

服务器性能:

cpu使用率:程序在运行期间实时使用的cpu比率。
load:代表着一段时间内正在使用和等待使用cpu的任务平均数,

机器的load很高,但是应用的qps、rt都不高,这种情况可能有以下几种原因:
其他资源导致cpu利用率上不去,大量线程在执行其他动作或者在等待,比如io的速度太慢,内存gc等。
如果系统资源不是瓶颈,则由可能是锁竞争、后端依赖的服务吞吐低、没有充分利用多核资源,多核却使用单线程。

查看机器load高的常见方法:

  • 机器的io(磁盘io、网络io):vmstat、iostat、sar -b等。
  • 网络io:iftop、iptraf、ntop、tcpdump等。
  • 内存:gc、swap、sar -r。
  • 锁竞争、上下文切换、后端依赖

磁盘io和网络io其实对于linux系统来说都是对文件操作读和写,

IOPS,IO系统每秒所执行IO操作的次数,是一个重要的用来衡量系统IO能力的一个参数。
IOPS计算公式
一个IO所用的时间=寻道时间+数据传输时间。
IOPS=IO并发系数/(寻道时间+数据传输时间)
IOPS 查看命令iostat

传输速度和吞吐率
传输速度和吞吐率是指的磁盘系统总线上流过的数据量或者网络传输一段时间传输的数据量

响应时间
IO响应时间也被称为IO延时(IO Latency),IO响应时间就是从操作系统内核发出的一个读或者写的IO命令到操作系统内核接收到IO回应的时间。等于IO操作时间和等待时间

IO性能调优

磁盘io调优
磁盘io调优利用内存和批处理,总结起来如下几个方法:

  1. 文件系统缓存
  2. 最小分配
  3. io访问调度
  4. 预读取
  5. 延迟分配

网络io调优
iptraf, tcpdump
1.协议参数调优
2.利用缓存和CDN
3.适用的IO模型

参考
进程、线程、协程之概念理解
关于服务器性能的思考

相关文章

  • 进程,线程,协程在服务器中如何正确使用

    老话长谈,先说明下进程,线程,协程的概念 进程: 进程是系统资源分配和调度的基本单位,是线程的容器,对于linux...

  • GO学习笔记(18) - 并发编程(1) - 理解gorouti

    目录 进程、线程与协程 并发模模型介绍 GO并发编程介绍 进程、线程与协程 进程和线程 进程是程序在操作系统中的一...

  • python多线程、多进程、协程的使用

    python多线程、多进程、协程的使用 本文主要介绍多线程、多进程、协程的最常见使用,每个的详细说明与介绍有时间会...

  • coroutine 纤程 -02

    大家对进程和线程都很熟悉,但是对于纤程(或是协程)感到陌生。其实协程在很早的时候就已经开始使用了。最开始使用进程,...

  • 进程 线程 协程 异步IO

    进程 线程 协程 异步IO 线程和进程对比 使用线程的方式不能很好的使用多核cpu的能力 使用进程可以利用多核CP...

  • Unity协同函数简介

    协程的概念 协程又可以称为用户线程,微线程,可以将其理解为单个进程或线程中的多个用户态线程,这些微线程在用户态进程...

  • python常用知识

    多线程,多进程,协程进程池 协程 字典 列表 函数 文件操作

  • Gevent高并发网络库精解

    进程 线程 协程 异步 并发编程(不是并行)目前有四种方式:多进程、多线程、协程和异步。 多进程编程在python...

  • kotlin协程

    协程基础 轻量级线程。在一个线程中可以启动多个协程。 在协程中使用同步方式写出异步代码(协程挂起时不会阻塞线程),...

  • kotlin之协程(五),launch 函数以及协程的取消与超时

    目录 kotlin之协程(一),线程,进程,协程,协程可以替换线程吗?[https://www.jianshu.c...

网友评论

      本文标题:进程,线程,协程在服务器中如何正确使用

      本文链接:https://www.haomeiwen.com/subject/mfiwfqtx.html