作者:禅与计算机程序设计艺术
1.背景介绍
由于项目的发展需要,业务系统需要迅速扩容、部署及迭代。为了应对这种快速增长的业务,公司决定对系统进行重构,提升系统的性能、可用性及可靠性。重构方案中引入了分布式、微服务等技术架构,同时要求将系统从单体应用向面向服务架构(SOA)演进。为了提高系统的运行效率,需要充分利用并发编程的优势。因此本系列文章基于Go语言深入理解并发编程与Channel机制,从最基本的概念出发,全面讲解Go语言中的并发编程及其特性。本系列文章只涉及Go语言,因为其他编程语言的并发机制都非常相似,主要区别在于语法上和实现原理。
2.核心概念与联系
2.1.进程与线程
计算机操作系统是一个运行程序的环境,它提供了资源分配和调度功能。操作系统运行多个进程,每个进程由一个或多个线程组成。每条线程执行指令序列,并共享同一进程所拥有的资源,包括内存、文件句柄、输入输出设备等。其中,线程又分为用户态线程(User Threads)和内核态线程(Kernel Threads)。
用户线程(User Threads)
应用程序级的线程,它完全受应用程序的控制,可以任意地创建、撤销、切换。这些线程没有内核支持,所有的操作都是由用户态程序自己处理。
内核线程(Kernel Threads)
操作系统提供的一种线程,用于支持一些需要复杂管理或维护的资源,如打开的文件、设备等。内核线程运行在内核模式下,因此