线程进程协程

##线程、进程、协程的区别
1.批处理
两个程序,一个程序在CPU上处理完了,交给第二个程序继续处理,这就是批处理
2.进程
CPU的速度越来越快, 远远超过了内存,硬盘的速度。
程序处理过程中需要从硬盘上读取数据的时候,CPU也一直在等待,这时候可以让另一个程序来运行一下
所以必须保存好前一个程序的执行现场:具体执行到哪一行程序指令了,函数调用到什么层次了
每个函数调用都有什么样的参数,CPU寄存器中的值… 等等一系列东西
执行现场,再加上程序的代码,就是一个执行中的程序,被称为"进程"
进程不能长时间占据CPU,只能在CPU上执行一小会儿,然后马上切换到别的进程去执行
由于CPU运行速度超快,两个程序虽然在不断地切换运行,好像是同时在执行一样这就是并发
后来出现了豪华电脑,每个程序都分配到了一个CPU,实现了真正的并发
3.线程
内部只有一个执行的流程,一遇到耗时的操作就得等待,内部设置两个执行流程(线程)
一个用来读写硬盘,另外一个处理界面
如果一个线程在读写硬盘, 就可以调度我的第二个线程来执行,这样界面至少还可以操作
一个进程中至少有一个执行的流程(主线程),也可以开启新的执行流程(线程)
线程变成了最小的调度单位。
4.协程
两个线程,一个线程向队列中放数据,另外一个从队列中取数据,处理起两个线程的协作就显得很麻烦
不但需要加锁,还得做好线程的通知和等待
它们是这么执行的:
1.生产者发送数据,暂停运行,不进行下一轮循环
2.消费者一直在value = yield 那里等待,直到数据到来,取出处理
3.消费者在循环中再次yield, 暂停执行。
4.生产者继续下一轮的循环,生成新的消息,发送给消费者。
让一个正在执行的程序暂停,是真的暂停了,程序就停在那里,等待运行控制权从对方那里转移过来
类似生产者,消费者这样的代码称为"协程",协程有个重要的特点,就是完全被我所调度和掌控,不用操作系统介入
协程比线程更加轻量级,操作系统内核不用参与,相当于用户态线程了,协程的开销极小
两个协程是’合作式’的,它们两个同一时刻只能有一个在运行,在底层可以用一个线程去执行这两个协程
在程序层面,可以用同步的方式实现异步的功能了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值