串一串多进程和多线程的概念

发布于:2022-12-07 ⋅ 阅读:(712) ⋅ 点赞:(0)

小型流水线

并发: 同一时间段内多个任务同时交叉执行。
并行:单位时间内多个任务同时在执行。

现实编程场景是线程的个数往往多于CPU的个数,在单个CPU端看来是同一时间段内有多个任务交叉执行。所以又叫并发编程,而不叫并行编程。(角度问题,单个CPU角度)

并发编程:多进程、多线程、协程和异步

  1. 多进程编程在python中有类似C的os.fork,更高层封装的有multiprocessing标准库
  2. 多线程编程python中有Thread和threading
  3. 异步编程在linux下主+要有三种实现select,poll,epoll 协程
  4. 协程在python中通常会说到yield,关于协程的库主要有greenlet, stackless, gevent, eventlet等实现。

并行是指在同一时刻有多个任务同时运行。比如在一个双核的CPU上,在A核心上运行浏览器进程,而在B核心上运行文档编辑器进程,在两个核心上运行的进程相互独立,同时运行(多进程并发)。又比如在一个游戏进程中,可以同时存在一个逻辑线程(处理游戏逻辑)和一个IO线程(处理IO任务),它们可以同时运行在两个不同的CPU核心上(多线程并发)。(并发的概念是包含并行的,并行是多线程的一种形式,多线程是并发的一种形式。)

多进程并发和多线程并发:

  • 多进程并发:
    • 优点: 操作系统会在进程间提供附加的保护机制,这可以我们更容易写出并发安全的代码.
    • 缺点: 进程的创建与销毁速度都比较慢,而且进程间的通信也比较复杂(需要通过套接字,管道)
  • 多线程并发:
    • 优点: 线程的创建与销毁速度则要更快,由于同一进程中的所有线程共享虚拟地址空间,因此线程间的通信开销要小得多.
    • 缺点: 但由于缺少线程间的数据保护,可能会出现多个线程同时读写同一数据造成的数据不一致现象。

同步:在进程中任务未结束时需等待结束才能执行下一个任务 —> 进程和线程
异步:在进程中任务未结束但在等待的过程中可先去执行下一个任务 —> 协程

goroutine 和线程的区别:
goroutine属于协程的概念,拥有自己的寄存器上下文和栈。
goroutine比线程更轻量级,可以创建十万、百万不用担心资源问题。线程对于不同的计算机,每个进程分配出来的线程的数量是有最高限制的。
从栈的方面对比:
线程栈的大小固定2MB
goroutine 的栈的内存是可变的,初始一般为 2KB,随着需求可以扩大达到1GB。
从调度方面:
线程的调度由 OS 的内核完成;线程的切换需要CPU寄存器和内存的数据交换,从而切换不同的线程上下文。 其触发方式为 CPU时钟.
goroutine协程用户来调度,依赖的是go自身的调度器。

三个内核参数的大小,都会影响创建线程的上限:

  • /proc/sys/kernel/threads-max,表示系统支持的最大线程数,默认值是 14553;
  • /proc/sys/kernel/pid_max,表示系统全局的 PID 号数值的限制,每一个进程或线程都有 ID,ID 的值超过这个数,进程或线程就会创建失败,默认值是 32768;
  • /proc/sys/vm/max_map_count,表示限制一个进程可以拥有的VMA(虚拟内存区域)的数量,具体什么意思我也没搞清楚,反正如果它的值很小,也会导致创建线程失败,默认值是 65530。

协程和线程的区别:

  1. 一个线程可以多个协程,一个进程也可以单独拥有多个协程。
  2. 线程进程都是同步机制,而协程则是异步。
  3. 协程能保留上一次调用时的状态,每次过程重入时,就相当于进入上一次调用的状态。
  4. 线程是抢占式,而协程是非抢占式的,所以需要用户自己释放使用权来切换到其他协程,因此同一时间其实只有一个协程拥有运行权,相当于单线程的能力。
  5. 协程并不是取代线程, 而且抽象于线程之上, 线程是被分割的CPU资源, 协程是组织好的代码流程, 协程需要线程来承载运行。
  6. 线程是协程的资源。协程通过Interceptor来间接使用线程这个资源。

现在编程更趋向于协程:

  1. 基于用户的调度器,数据一致性可以把控。对比线程可能出现数据不一致的现象。
  2. 栈的大小能灵活调整。
  3. 能充分的利用多核的CPU
  4. 协程间切换和通信都比较灵活。

进程和线程的资源的内容:
https://www.likecs.com/show-204854774.html

以上是对线程和协程的一连串的概念和联系,希望对学习中概念的理解会起到帮助。

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到