什么是程序&进程&线程&协程?

本文详细介绍了程序、进程、线程和协程的概念。程序是计算机执行的指令集合,进程是程序的一次动态执行过程,拥有独立的内存空间。线程是进程中的基本执行单元,而协程则是一种轻量级线程,允许在执行过程中主动交出控制权。理解这些概念对于深入理解操作系统和并发编程至关重要。

一.什么是程序?

程序=数据结构+算法

程序是指示计算机每一步动作的指令,也是一个可执行文件。是指令和数据的组合体。是一个静态的实体。

程序(Program)告诉计算机应如何完成一个计算任务,这里的计算可以是数学运算,比如解方程,也可以是符号运算,比如查找和替换文档中的某个单词。

二.什么是进程?

进程就是正在进行中的程序,会占用相应的内存地址,由CPU进行执行和计算。在用户角度来看,进程是程序的一次动态执行过程。在操作系统的角度来看,进程是操作系统分配资源的最小的基本单位。

进程的特点

(1)独立性

(2)动态性

(3)并发性

三.什么是线程?

线程是操作系统OS能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.
一个进程可以开启多个线程,其中有一个主线程来调用本进程中的其他线程。

线程与进程的关系:

一个程序运行后至少会有一个进程,而一个进程当中包含一个或多个线程(即单线程程序或多线程程序)。而每个线程在共享同一个进程中的内存的同时,又有自己独立的内存空间。

进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。
线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。
一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行。

四.什么是协程?

协程又称作轻量级线程或用户态线程。如果一种实现使得每个线程需要自己通过调用某个方法,主动交出控制权。那么我们就称这种用户态线程是协作式的,即是协程

### Golang 中进程协程线程区别 #### 进程 在 Go 语言中,进程是指操作系统级别的独立执行单元。每个进程拥有自己独立的地址空间其他资源,不同进程之间无法直接共享内存,必须借助于进程间通信(IPC)机制来进行数据交换[^1]。 ```go package main import ( "fmt" "os/exec" ) func main() { cmd := exec.Command("echo", "Hello from another process!") out, _ := cmd.Output() fmt.Println(string(out)) } ``` 这段代码展示了如何利用 `exec.Command` 创建一个新的子进程并与其交互[^4]。 #### 线程 线程是在同一进程中多个顺序流之一;它们共享相同的上下文环境以及大部分的数据结构,因此相比起完全隔离的进程来说更易于实现资源共享。然而,在某些情况下仍然存在同步问题需要注意处理。对于 Go 来说,默认情况下会根据 CPU 数量自动调整可用的工作线程数量,并且可以通过设置 `runtime.GOMAXPROCS()` 函数改变这一数值[^2]。 #### 协程 (Goroutine) Goroutines 是轻量级的用户态线程,由 Go 的运行时系统管理。其特点在于: - **低开销**:创建成本低廉,能够轻松支持成千上万个并发操作; - **灵活调度**:基于事件驱动模型而非抢占式时间片轮转算法,允许更加高效的 I/O 多路复用; - **透明迁移**:当某个 Goroutine 阻塞时,它会被挂起到等待队列里直到条件满足重新激活,与此同时其它未受影响的任务将继续正常运转而不必关心具体发生了什么变化[^5]。 下面是一个简单的例子说明怎样启动两个不同的 Goroutine 并发工作: ```go package main import ( "fmt" "time" ) func say(s string) { for i := 0; i < 5; i++ { time.Sleep(100 * time.Millisecond) fmt.Println(s) } } func main() { go say("world") say("hello") // Wait a moment to see the result. time.Sleep(time.Second) } ``` 在这个程序里面,“hello” “world” 将交替打印出来,体现了两者间的异步行为模式[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值