Go语言学习笔记-进程和线程

简介: Go语言学习笔记-进程和线程

1、虚拟地址空间划分

  • 每个进程都有自己虚拟地址空间
  • 为了保障系统运行的安全,虚拟地址空间被划分为用户空间内核空间
  • 操作系统运行在内核空间,用户程序运行在用户空间,内核空间由所有进程地址共享,但是用户程序不能直接访问内核空间

2、线程

  • 操作系统的进程控制信息是保存在内核空间的,里边有页目录、进程ID、打开文件句柄等信息
  • 线程就是进程中的执行体,有指定的执行入口(通常是某个函数的入口)
  • 线程执行时要使用从进程虚拟地址空间中分配的栈空间来存储数据
  • 在创建线程时,操作系统会使用用户空间和内核空间分别分配用户栈内核栈

  • 线程切换到内核态执行时会使用内核栈,目的是为了不允许用户代码对它进行修改
  • 操作系统会记录每个线程的控制信息,如线程栈、线程入口、线程ID等等
  • 在Windows中线程控制信息对应TCB
  • 在Linux中对应task_struct结构体
  • 在PCB中可以找到进程拥有的线程列表
  • 同一个进程内的线程可以共享进程的控制信息,如进程ID、句柄表等

3、线程执行

  • 当执行进程中某个线程时,CPU的指令指针会指向线程的执行入口,栈基和栈指针寄存器会记录线程的用户栈空位置
  • CPU执行程序时,面向的是某个线程,所以线程是操作系统调度与执行的基本单位
  • 一个进程中至少要有一个线程,从某个开始执行的线程称为主线程,它是由父进程或操作系统创建的
  • 进程中的其他线程一般都是由主线程创建的
  • 线程中发生函数调用时就会分配函数调用栈
  • 虚拟内存分配、文件操作、网络读写等都是由操作系统来实现的

4、系统服务

  • 当线程调用操作系统提供的系统服务,需要进行系统调用
  • CPU中会有一个标志用于记录当前程序是用户态还是内核态
  • 当发生系统调用时,CPU就会切换到内核态,就能使用内核空间的内核栈,使用内核的系统函数
  • 最初系统调用是通过软中断触发的(通过指令模拟中断),与其对应的就是硬件中断,操作系统会记录各种中断信息(如x86的sysenter和amd64的syscall),等系统调用结束后会利用之前保存的信息恢复到用户线程的执行现场

5、线程切换

  • 只有获得CPU时间片的程序才能运行,由于时间片很短,用户感觉不到程序的切换过程
  • CPU执行的很快,在很短的时间内足够执行很多很多的指令
  • 某个线程获得的时间片用完时,CPU硬件时钟会触发中断,会执行下一个准备就绪的线程
  • 同一个进程的线程间切换

  • 不同进程的线程切换



相关文章
|
1月前
|
存储 监控 算法
基于 Go 语言跳表结构的局域网控制桌面软件进程管理算法研究
针对企业局域网控制桌面软件对海量进程实时监控的需求,本文提出基于跳表的高效管理方案。通过多级索引实现O(log n)的查询、插入与删除性能,结合Go语言实现并发安全的跳表结构,显著提升进程状态处理效率,适用于千级进程的毫秒级响应场景。
142 15
|
6月前
|
Java 开发者 Kotlin
华为仓颉语言初识:并发编程之线程的基本使用
本文详细介绍了仓颉语言中线程的基本使用,包括线程创建(通过`spawn`关键字)、线程名称设置、线程执行控制(使用`get`方法阻塞主线程以获取子线程结果)以及线程取消(通过`cancel()`方法)。文章还指出仓颉线程与Java等语言的差异,例如默认不提供线程名称。掌握这些内容有助于开发者高效处理并发任务,提升程序性能。
238 2
|
1月前
|
Java 测试技术 API
【JUC】(1)带你重新认识进程与线程!!让你深层次了解线程运行的睡眠与打断!!
JUC是什么?你可以说它就是研究Java方面的并发过程。本篇是JUC专栏的第一章!带你了解并行与并发、线程与程序、线程的启动与休眠、打断和等待!全是干货!快快快!
425 2
|
1月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
148 1
|
1月前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
166 1
|
7月前
|
并行计算 Linux
Linux内核中的线程和进程实现详解
了解进程和线程如何工作,可以帮助我们更好地编写程序,充分利用多核CPU,实现并行计算,提高系统的响应速度和计算效能。记住,适当平衡进程和线程的使用,既要拥有独立空间的'兄弟',也需要在'家庭'中分享和并行的成员。对于这个世界,现在,你应该有一个全新的认识。
285 67
|
5月前
|
调度 开发工具 Android开发
【HarmonyOS Next】鸿蒙应用进程和线程详解
进程的定义: 进程是系统进行资源分配的基本单位,是操作系统结构的基础。 在鸿蒙系统中,一个应用下会有三类进程:
202 0
|
8月前
|
SQL 监控 网络协议
YashanDB进程线程体系
YashanDB进程线程体系
|
9月前
|
数据采集 Java 数据处理
Python实用技巧:轻松驾驭多线程与多进程,加速任务执行
在Python编程中,多线程和多进程是提升程序效率的关键工具。多线程适用于I/O密集型任务,如文件读写、网络请求;多进程则适合CPU密集型任务,如科学计算、图像处理。本文详细介绍这两种并发编程方式的基本用法及应用场景,并通过实例代码展示如何使用threading、multiprocessing模块及线程池、进程池来优化程序性能。结合实际案例,帮助读者掌握并发编程技巧,提高程序执行速度和资源利用率。
464 0
|
1月前
|
Java
如何在Java中进行多线程编程
Java多线程编程常用方式包括:继承Thread类、实现Runnable接口、Callable接口(可返回结果)及使用线程池。推荐线程池以提升性能,避免频繁创建线程。结合同步与通信机制,可有效管理并发任务。
146 6

热门文章

最新文章