进程 线程
进程是操作系统提供给我们的一个抽象;我们通过创建进程来使用CPU、读写内存/硬盘、进程IO操作。
每个进程最少会有一个线程,通过线程来执行命令,进程下可以通过创建多个线程来加速执行速度,进程下的线程共享进程的各种资源,包括内存,IO等。
线程共享内存带来了方便,但同时共享导致了竞态资源问题;为了解决这个问题,操作系统提供了 Mutex - Mutual Exclusion 互斥锁,降低性能解决共享带来的问题。
线程 协程
当我们创建线程的时候需要 系统调用,内核会创建一个新的线程,这个线程通过操作系统来进行调度。
协程,又叫做用户态线程,顾名思义,是在用户空间创建的线程,golang取消线程,使用协程来替代。
协程相比线程,优点在于占用内存空间小,可以无限制创建;因为是用户进程自己调度,所以减少了切换带来的性能损耗。
内核 - 任务
我们眼中的进程、线程在内核中,都是以任务存在的。
其包含:
- 任务ID
- 信号
- 任务状态
- 进程调度
- 关系
- 权限
- 运行统计
- 内存管理
- 文件与文件系统
- 内核栈
有疑问加站长微信联系(非本文作者)
![](https://static.golangjob.cn/static/img/footer.png?imageView2/2/w/280)