PHPer的Go之路 -- 程序、进程、线程、协程
简介
程序 进程 线程 协程
对于拍黄片(php)程序员来说,对于进程、线程、协程这些概念可能比较模糊,因为,在php当中,很少会出现这些概念,学习go语言之前,我们先来介绍一些php接触较少的概念。
程序
编译好的二进制文件,不占用资源。
进程
活跃着的程序,占用资源,是操作系统的基本单位。表示一个程序的上下文执行活动(打开、执行、保存…),是系统资源分配的最小单位,一个程序至少有一个进程。
线程
进程的执行单位,与进程共享资源。
一个进程至少有一个线程。进程执行程序时候的最小调度单位(执行a,执行b…),是CPU调度的最小单位.进程相当于一个容器,而线程而是运行在容器里面的,因此对于容器内的东西,线程是共同享有的,因此线程间的通信可以直接通过全局变量进行通信,共享意味着竞争,导致数据不安全,为了保护内存空间的数据安全,引入”互斥锁”。
协程
协程是一种用户态的轻量级线程,协程的调度完全由用户控制。
迭代器最基本的规定了对象可以通过next返回下一个值,而不是像数组,列表一样一次性返回。
生成器: 使用 yield 关键字的函数,生成器也可通过next返回下一个值。
进程与程序关系:
用户角度:进程是程序的一个执行过程。
操作系统角度:进程是系统分配的内存、CPU时间片等资源的基本单位。
进程与程序区别:
进程是戏剧,程序是剧本,戏剧根据剧本来。
程序是一个静态文件,存于磁盘中。
进程处于动态程序运行的系统资源管理实体。