能否解释下什么是进程、线程、协程,他们之间的关系是怎样的?

2021-12-15 14:24:51 浏览数 (4)

进程: 本质上是一个独立执行的程序,进程是操作系统进行资源分配和调度的基本概念,操作系统进行资源分配和调度的一个独立单位。


线程: 是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一个进程中可以并发多个线程,每条线程执行不同的任务,切换受系统控制。


协程:  又称为微线程,是一种用户态的轻量级线程,协程不像线程和进程需要进行系统内核上的上下文切换,协程的上下文切换是由用户自己决定的,有自己的上下文,所以说是轻量级的线程,也称之为用户级别的线程就叫协程,一个线程可以多个协程,线程进程都是同步机制,而协程则是异步Java的原生语法中并没有实现协程,目前python、Lua和GO等语言支持。


关系:一个进程可以有多个线程,它允许计算机同时运行两个或多个程序。线程是进程的最小执行单位,CPU
的调度切换的是进程和线程,进程和线程多了之后调度会消耗大量的CPU,CPU上真正运行的是线程,线程可
以对应多个协程。


协程对于多线程有什么优缺点吗?

优点:
非常快速的上下文切换,不用系统内核的上下文切换,减小开销。
单线程即可实现高并发,单核CPU可以支持上万的协程。
由于只有一个线程,也不存在同时写变量的冲突,在协程中控制共享资源不需要加锁。


缺点:
协程无法利用多核资源,本质也是个单线程。
协程需要和进程配合才能运行在多CPU上。
目前java没成熟的第三方库,存在风险。
调试debug存在难度,不利于发现问题。


0 人点赞