多进程 and 多线程

初步认识

当一个程序进入内存运行时,即变成一个进程。进程时处于运行过程中的程序。进程是操作系统进行资源分配和调度的一个独立单位。线程(thread)是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。线程也被称为轻量级进程。线程在进程中是独立、并发的执行流。

多进程和多线程的区别

  • 一个进程可以有很多线程,每条线程并行执行不同的任务。因此多线程中,所有子线程的进程号相同;多进程中,不同的子进程进程号不同。
  • 多线程可以共享全局变量,多进程不能。在多进程中,同一个变量,各自有一份拷贝存在于每个进程中,互不影响;而多线程中,所有变量都由所有线程共享。
  • 同一进程内的线程共享本进程的资源如内存、I/O、cpu等,但是进程之间的资源是独立的。
  • 一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉。所以多进程要比多线程健壮。
  • 进程切换时,消耗的资源大,效率高。所以涉及到频繁的切换时,使用线程要好于进程。同样如果要求同时进行并且又要共享某些变量的并发操作,只能用线程不能用进程。
  • 线程执行开销小,但是不利于资源的管理和保护。进程执行开销大,但是能够很好的进行资源管理和保护。
  • 两者均可并发执行。

多进程(multiprocessing)

每个事件片内将CPU 分配给某一个任务,时间片结束,CPU自动回收,再分配给另外的任务。从外部来看,所有的任务都是同时在执行,但在CPU上,任务是按照串行依次运行(单核CPU)。如果是多核,多个进程任务可以并行;但是在单核,多进程只能串行执行。

多进程的优点

  • 编程相对容易:通常不需要考虑锁和同步资源的问题
  • 内存隔离,一个进程崩溃不会影响其他线程,方便调试
  • 可以同时运行多个任务
  • 程序因IO阻塞时,可以释放CPU,让CPU为其他程序服务
  • 当系统有多个CPU时,可以为多个程序同时服务

多进程的缺点

  • 进程的创建和销毁过程需要消耗较多的计算机资源;
  • 逻辑控制复杂,需要和主程序交互;
  • 多进程调度开销比较大
  • 需要跨进程边界

多线程(threading)

如果一个子任务阻塞,程序可以将CPU调度到另外一个子任务进行工作。这样CPU还是保留在本程序中,而不是被调度到别的进程去。这样,提高了本程序所获得的CPU时间和利用率。

多线程的优点

  • 多线程开销小,提高了系统的并行性
  • 创建速度快,方便高效的数据共享
  • 线程更加轻量级,更容易切换
  • 多个线程更容易管理
  • 使用多线程可以把程序中占据时间长的任务放到后台去处理,如图片、视屏的下载多线程的缺点

多线程的缺点

  • 大量的线程降低代码的可读性
  • 更多的线程需要更多的内存空间
  • 当多个线程对同一个资源出现争夺时候要注意线程安全的问题
  • 没有内存隔离,单个线程崩溃会导致整个应用的退出
posted @   雨快停了  阅读(80)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
点击右上角即可分享
微信分享提示