最近经常有同学在小猿圈网站留言说:小猿圈网站上边的课程太多了,而且全部免费,自己就忍不住都想学习,尤其是学习了python和go之后,就有些混淆了概念,今天小猿圈就给大家分享一下python和go语言中进程、线程、协程的区别。
进程的定义:
进程,是计算机中已运行程序的实体。程序本身只是指令、数据及其组织形式的描述,进程才是程序的真正运行实例。
线程的定义:
操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。
进程和线程的关系:
一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
CPU的最小调度单元是线程不是进程,所以单进程多线程也可以利用多核CPU.
协程的定义:
协程通过在线程中实现调度,避免了陷入内核级别的上下文切换造成的性能损失,进而突破了线程在IO上的性能瓶颈。
协程和线程的关系
协程是在语言层面实现对线程的调度,避免了内核级别的上下文消耗。
python协程与调度
Python的协程源于yield指令。yield有两个功能:
• yield item用于产出一个值,反馈给next()的调用方。
• 作出让步,暂停执行生成器,让调用方继续工作,直到需要使用另一个值时再调用next()。
import asyncio
async def compute(x, y):
print(“Compute %s + %s …” % (x, y))
await asyncio.sleep(x + y)
return x + y
async def print_sum(x, y