php面试题1-线程和进程的区别(顺带提下协程)

原创 2018年04月17日 15:07:07

一、什么是进程

进程是程序执行是的一个实例,进程能够分配给cpu和内存等资源。进程一般包括指令集和系统资源,其中指令集就是你的代码,系统资源就是指cpu、内存以及I/O等。

进程是一个程序在一个数据集中的一次动态执行过程,可以简单理解为“正在执行的程序”,它是CPU资源分配和调度的独立单位。
进程一般由程序、数据集、进程控制块三部分组成。我们编写的程序用来描述进程要完成哪些功能以及如何完成;数据集则是程序在执行过程中所需要使用的资源;进程控制块用来记录进程的外部特征,描述进程的执行变化过程,系统可以利用它来控制和管理进程,它是系统感知进程存在的唯一标志。
进程的局限是创建、撤销和切换的开销比较大。

二、什么是线程

线程是进程的一个执行流,线程不能分配系统资源,它是进程的一部分,比进程更小的独立运行的单位。
解释一下:进程有两个特性:一是资源的所有权,一个是调度执行(指令集),线程是调度执行中的一部分,是指进程执行过程的路径,也叫程序执行流。线程有时候也叫轻量级进程。

线程是在进程之后发展出来的概念。 线程也叫轻量级进程,它是一个基本的CPU执行单元,也是程序执行过程中的最小单元,由线程ID、程序计数器、寄存器集合和堆栈共同组成。一个进程可以包含多个线程。
线程的优点是减小了程序并发执行时的开销,提高了操作系统的并发性能,缺点是线程没有自己的系统资源,只拥有在运行时必不可少的资源,但同一进程的各线程可以共享进程所拥有的系统资源,如果把进程比作一个车间,那么线程就好比是车间里面的工人。不过对于某些独占性资源存在锁机制,处理不当可能会产生“死锁”。

三、什么是协程

协程是一种用户态的轻量级线程,又称微线程,英文名Coroutine,协程的调度完全由用户控制。人们通常将协程和子程序(函数)比较着理解。
子程序调用总是一个入口,一次返回,一旦退出即完成了子程序的执行。
协程的起始处是第一个入口点,在协程里,返回点之后是接下来的入口点。在python中,协程可以通过yield来调用其它协程。通过yield方式转移执行权的协程之间不是调用者与被调用者的关系,而是彼此对称、平等的,通过相互协作共同完成任务。其运行的大致流程如下:
第一步,协程A开始执行。
第二步,协程A执行到一半,进入暂停,通过yield命令将执行权转移到协程B。
第三步,(一段时间后)协程B交还执行权。
第四步,协程A恢复执行。

协程的特点在于是一个线程执行,与多线程相比,其优势体现在:
* 协程的执行效率非常高。因为子程序切换不是线程切换,而是由程序自身控制,因此,没有线程切换的开销,和多线程比,线程数量越多,协程的性能优势就越明显。
* 协程不需要多线程的锁机制。在协程中控制共享资源不加锁,只需要判断状态就好了。
Tips:利用多核CPU最简单的方法是多进程+协程,既充分利用多核,又充分发挥协程的高效率,可获得极高的性能。

四、进程和线程的关系

进程就像地主,有土地(系统资源),线程就像佃户(线程,执行种地流程)。每个地主(进程)只要有一个干活的佃户(线程)。
进程-资源分配的最小单位,相对健壮,崩溃一般不影响其他进程,但是切换进程时耗费资源,效率差些。
线程-程序执行的最小单位,没有独立的地址空间,一个线程死掉可能整个进程就死掉,但是节省资源,切换效率高。

五、php编程常见的进程和线程

1、在web应用中,我们每次访问php,就建立一个PHP进程,当然也会建立至少一个PHP线程。
2、PHP使用pcntl来进行多进程编程
3、PHP中使用pthreads来进行多线程编程
4、nginx的每个进程只有一个线程,每个线程可以处理多个客户端的访问
5、php-fpm使用多进程模型,每个进程只有一个线程,每个线程只能处理一个客户端访问
6、apache可能使用多进程模型,也可能使用多线程模型,取决于使用哪种SAPI.
7、进程是cpu资源分配的最小单位,线程是cpu调度的最小单位

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Rodgexue/article/details/79975096

进程、线程和协程的区别是什么

每天都去接触一些新的问题,生活就会少一些问题,来吧,让我们在技术的路上一探到底吧 进程拥有自己独立的堆和栈,既不共享堆,亦不共享栈,进程由操作系统调度。 线程拥有自己独立的栈和共享的堆,共享堆...
  • liu_zhuang_love
  • liu_zhuang_love
  • 2016-06-12 21:29:58
  • 1614

进程、线程、协程、异步、非堵塞IO,多路复用详解

进程(process) 进程的概念 php如何创建子进程,修改进程名称 php查看进程 进程组、会话 daemon进程 进程间通信(ipc),信号,队列,共享内存 进程的概念进程:是系统进行资源分配和...
  • baixiaoshi
  • baixiaoshi
  • 2017-05-13 17:29:26
  • 864

进程、线程与协程的比较

进程、线程和协程是三个在多任务处理中常听到的概念,三者各有区别又相互联系。 进程 进程是一个程序在一个数据集中的一次动态执行过程,可以简单理解为“正在执行的程序”,它是CPU资源分配和调度的独...
  • Blateyang
  • Blateyang
  • 2017-09-25 19:59:57
  • 1889

进程、线程和协程的理解

进程、线程和协程的理解 进程、线程和协程之间的关系和区别也困扰我一阵子了,最近有一些心得,写一下。 进程拥有自己独立的堆和栈,既不共享堆,亦不共享栈,进程由操作系统调度。 线程拥有自...
  • hairetz
  • hairetz
  • 2013-11-14 17:13:19
  • 41823

线程、进程和协程

从一定意义上讲,进程就是一个应用程序在处理机上的一次执行过程,它是一个动态的概念,而线程是进程中的一部分,进程包含多个线程在运行。进程,是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态...
  • qq_17612199
  • qq_17612199
  • 2016-03-31 17:07:00
  • 1565

python协程面试题(一)

题目 使用协程的概念,达到以下目的, 输入a,b,c,d四个整数,打印(a+b)*(c+d)的值。假设a+b的过程是耗时1秒IO操作。 笔者的解答 """ 使用协程的概念,达到以下目的, 输入a...
  • leon_wzm
  • leon_wzm
  • 2018-01-17 14:51:19
  • 85

PHP协程实现过程详解

实现 PHP 协程需要了解的基本内容。 多进程/线程 最早的服务器端程序都是通过多进程、多线程来解决并发IO的问题。进程模型出现的最早,从Unix 系统诞生就开始有了进程的概念。最早的服务...
  • cs729298
  • cs729298
  • 2017-06-08 11:52:14
  • 1297

Java面试18|关于进程、线程与协程

1、IPC(Inter-Process Communication,进程间通信)与线程通信的几种方式   # 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在...
  • x380481791
  • x380481791
  • 2017-08-11 10:28:35
  • 86

关于线程Thread和协程Coroutine

线程与协同程序的主要区别在于,一个具有多线程的程序可以同时运行几个线程,而协同程序却需要彼此协作地运行。就是说,一个具有多个协同程序的程序在任何时刻只能运行一个协同程序,并且正在运行的协同程序只会在其...
  • kobejayandy
  • kobejayandy
  • 2014-01-18 17:26:35
  • 2225

【Python】进程线程协程对比

简单总结 进程是资源分配的单位线程是操作系统调度的单位进程切换需要的资源很最大,效率很低线程切换需要的资源一般,效率一般协程切换任务资源很小,效率高多进程、多线程根据cpu核数不一样可能是并行的...
  • milankunde
  • milankunde
  • 2017-12-25 20:45:57
  • 113
收藏助手
不良信息举报
您举报文章:php面试题1-线程和进程的区别(顺带提下协程)
举报原因:
原因补充:

(最多只允许输入30个字)