这是我参与「第五届青训营 」伴学笔记创作活动的第8天
基本概念:
- 不同的cpu核的进程里的线程可以并行
- 协程之间能并行
- 多个进程里开单个线程里开协程(在不同核里的进程运行的各自线程的协程),此时的协程也是并行的。
lua协程
- 协程:拥有自己独立的栈、局部变量和PC计数器,也与其余协程共享全局变量和其他大部分东西。
- 一个多协程程序在同时间内只能运行一个协程,并且正在执行的协程只会在其显式地要求挂起,Suspend时,也会暂停(抚抢占、无并发) 协程无法外部停止,有可能导致程序堵塞
协程有3个状态:
- 挂起态(suspended)
- 运行态(unning)
- 3.死亡(dead)
lua的协程是一种非对称式协程: 协程的执行通过两个函数来控制,协程的执行,一个用(重)调用协程,另一个用于挂起协程。
lua协程 与 go协程 的区别:
go的协程通过通道进行通信,lua协程通过让出和回复操作来通信。
协程是一个概念,跟语言没有关系,lua的协程能不能并行,取决于这个lua程序当时是不是多进程,有没有多个cpu核。看起来是串行的,但实际上go也是这样子,只是go屏蔽了协程调度,运行。还有lua里面看到的挂起,唤醒这些过程。
对于go:其实他本身如果只是单进程的话,那他也是串行的。go做的lua都可以,而lua他开放了调度的能力。也就是他可以让编程的人自己去调度。