• 软件:1160
  • 资讯:41601|
  • 收录网站:97880|

IT精英团

数百个关于协同、过程和线索的讲座

数百个关于协同、过程和线索的讲座

浏览次数:
评论次数:
编辑: 景同
信息来源: 51CTO博客
更新日期: 2021-06-11 01:09:53
摘要

协程、进程、线程百家讲坛,协程、进程、线程百家讲坛进程进程就是一个管道,进程是系统进行资源分配和调度的一个独立单位。每个进程是独立内存空间,不同进程通过进程间通信来通信。由于进程比较重量,占据独立的内存,所以上下文进程间的切换开销(栈、寄存器、虚拟内存、文件句柄等)比较大,但相对比较稳定安全。线程线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,

  • 资讯详情

数百个关于协调、流程和主题的论坛

进程

流程是一个管道,是一个独立的资源分配和调度单元。每个进程都是一个独立的内存空间,不同的进程通过进程间通信进行通信。因为进程很重,占用独立内存,切换开销(堆栈、寄存器、虚拟内存、文件句柄等。)之间的上下文进程相对较大,但相对稳定和安全。

线程

线程是进程的实体,是CPU调度和调度的基本单位,比进程小,可以独立运行。线程本身基本没有系统资源,只是调度资源,没有竞争资源,是调度资源的最小单位。它可以与属于同一个进程的其他线程共享该进程拥有的所有资源。线程间通信主要通过共享内存,上下文切换快,资源开销少,但相比不稳定的进程,容易丢失数据。

协程

协和是用户模式的轻量级线程,其调度完全由用户控制。协处理器有自己的寄存器环境和堆栈。协同调度切换时,寄存器上下文和栈保存到其他地方,切换回来时,恢复之前保存的寄存器上下文和栈。栈的直接操作基本没有内核切换的开销,可以不加锁的访问全局变量,所以上下文切换非常快。

为什么说携程比线程块

线程是cpu调度的最小单位。在python中,当一个线程运行时,它会独占GIL,而其他线程不能运行。只有当这个线程结束运行或者运行时间较长的线程被解开时,才会切换到其他线程执行。可以看出python中的多线程是由cpu交替执行的,但是交替的频率很快,感觉是并行的。

协同进程就是放弃在用户空间执行其他程序的控制权。该程序执行后,放弃执行原程序的控制权。它不是多线程,而是在用户空间实现并发的一种方式。优点是没有多线程之间切换造成的CPU消耗。

协和是复用单线程,这个要看进程的存在,协和要看线程的存在。协同处理是帮助线程切换任务资源。

GIL VS Lock

Python已经有了一个GIL来确保一次只能执行一个线程。为什么这里需要锁?请注意,这里的锁是用户级锁,与GIL无关。

既然用户程序已经有了自己的锁,为什么C python还需要GIL?加入GIL的主要原因是为了降低程序开发的复杂性。比如现在写python的时候,不需要关心内存回收,因为python解释器帮助你定期自动回收内存。你可以理解Python解释器中有一个独立的线程,每隔一段时间就会醒来做一次全局轮询,看看哪些内存数据可以清空。这时候你自己程序里的线程和py解释器的线程并发运行。假设你的线程删除了一个变量,在清空这个变量的过程中的清空时刻,py解释器的垃圾收集线程可能刚刚重新分配了尚未清空的内存空间。结果,新分配的数据可能被删除。为了解决类似的问题,python解释器被简单粗暴地锁定,也就是一个线程运行时,其他人都不能移动,从而解决了上述问题,可以说是早期版本Python的遗留。

码字不容易。请在评论区留言收藏。或者加入一个群聊一起学习。

三张图片带你了解stl内存分配器 你不再害怕面试官的提问
« 上一篇
返回列表
下一篇 »
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
你会是第一个来这里评论的人吗?
最近发布资讯
更多