如何理解php的进程,线程,协程?

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

如何理解php的进程,线程,协程?
⼀.概念
进程:操作系统分配和管理资源的最基本单位。

线程:进程中的单⼀顺序流。

协程:由⽤户,模拟线程操作。

⼆.区别
线程之间资源共享,⽽进程间资源独⽴。

如何实现资源共享:
同⼀个进程中的多个线程。

这些线程所以对应的是同⼀个进程描述符。

通过同⼀个进程中多个线程指向同⼀个进程描述符,实现了线程间的资源共享。

三.使⽤场景
在很多场景下,其实⽤户是期望资源本⾝就可以共享的。

我们玩游戏的时候,期望⼀边能继续玩,⼀边能后台加载后续的内容。

我们在使⽤视频软件的时候,我们期望视频能⼀边下载,⼀边播放已经下载完的内容。

线程之间的资源可以共享,在这些场景下使⽤就⾮常合适。

有了线程,为啥还要有协程?
如今出现了⼀种场景:
开发者在每个线程中只做⾮常轻量的操作,⽐如访问⼀个极⼩的⽂件,下载⼀张极⼩的图⽚,加载⼀段极⼩的⽂本等。

但是,这样”轻量的操作“的量却⾮常多。

在有⼤量这样的轻量操作的场景下,即使可以通过使⽤线程池来避免创建与销毁的开销,但是线程切换的开销也会⾮常⼤,甚⾄于接近操作本⾝的开销。

线程切换的开销主要有以下两点:
恢复现场成本。

cpu缓存中的资源需要从⼀个线程更新到另⼀个线程。

(在java中,这块内容也称为⼯作区)
保护现场成本。

操作系统切换线程需要使⽤系统中断,保留现场也需要消耗⼀定资源。

使⽤协程,虽然也不可能完全避免这两点开销,但是由于协程不再是交给操作系统控制的,⽽是直接由开发者在⽤户空间控制。

四.优劣势:
1. 优势
由于不需要操作系统⼲预,因此所有操作完全可以在⽤户空间实现,更加轻量。

2. 劣势
所有原先作⽤于线程的操作,⽤户都需要⾃⼰去处理,如:协程的创建、销毁、切换、调度等。

相关文档
最新文档