1.线程同步概念线程同步的真实意思,其实是“排队”:几个线程之间要排队,一个一个对共享资源进行操作,而不是同时进行操作。 而最让人无语的是,线程同步的目的就是让各个线程去排队使用资源,而不是让线程同时去使用资源。
假设有 4 个线程 A、B、C、D,当前一个线程 A 对内存中的共享资源进行访问的时候,其他线程 B, C, D 都不可以对这块内存进行操作,直到线程 A 对这块内存访问完毕为止,B,C,D 中的一个才能访问这块内存,剩余的两个需要继续阻塞等待,以此类推,直至所有的线程都对这块内存操作完毕。 线程对内存的这种访问方式就称之为线程同步,通过对概念的介绍,我们可以了解到所谓的同步并不是多个线程同时对内存进行访问,而是按照先后顺序依次进行的。
为什么要线程同步在研究线程同步之前,先来看一个两个线程交替计数(每个线程数 50 个数,交替数到 100)的例子:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556#include &l ...
1.虚拟地址空间虚拟地址空间是一个非常抽象的概念,先根据字面意思进行解释:
它可以用来加载程序数据(数据可能被加载到物理内存上,空间不够就加载到虚拟内存中)
它对应着一段连续的内存地址,起始位置为 0。
之所以说虚拟是因为这个起始的 0 地址是被虚拟出来的, 不是物理内存的 0 地址
虚拟地址空间的大小也由操作系统决定,32位的操作系统虚拟地址空间的大小为 232 字节,也就是 4G,64 位的操作系统虚拟地址空间大小为 264 字节,这是一个非常大的数,感兴趣可以自己计算一下。当我们运行磁盘上一个可执行程序, 就会得到一个进程,内核会给每一个运行的进程创建一块属于自己的虚拟地址空间,并将应用程序数据装载到虚拟地址空间对应的地址上。
进程在运行过程中,程序内部所有的指令都是通过 CPU 处理完成的,CPU 只进行数据运算并不具备数据存储的能力,其处理的数据都加载自物理内存,那么进程中的数据是如何进出入到物理内存中的呢?其实是通过 CPU 中的内存管理单元 MMU(Memory Management Unit)从进程的虚拟地址空间中映射过去的。
意义通过上边的介绍大家会感觉到一头雾 ...
1.线程概述
多线程和多进程都能够提高程序的并发性,但多线程对系统资源消耗更少,且多线程和多进程效率都是差不多的
cpu会将单位时间分为很多份,每一份叫时间片,由系统进行调度,每个线程执行时都需要抢时间片,抢到的线程就执行成为运行态,没抢到就处于就绪态,执行完之后又成为就绪态继续抢时间片(都是随机的,无序运行)。
线程是轻量级的进程(LWP:light weight process),在 Linux 环境下线程的本质仍是进程。在计算机上运行的程序是一组指令及指令参数的组合,指令按照既定的逻辑控制计算机运行。操作系统会以进程为单位,分配系统资源,可以这样理解,进程是资源分配的最小单位,线程是操作系统调度执行的最小单位。
先从概念上了解一下线程和进程之间的区别:
进程有自己独立的地址空间,多个线程共用同一个地址空间
线程更加节省系统资源,效率不仅可以保持的,而且能够更高
在一个地址空间中多个线程独享:每个线程都有属于自己的栈区,寄存器 (内核中管理的)
在一个地址空间中多个线程共享:代码段,堆区,全局数据区,打开的文件 (文件描述符表) 都是线程共享的
(详细见b ...
嵌入式软件
未读实验和一些好用的工具欢迎来到 波特律动 | 波特律动 (keysking.com)
串口调试助手、蓝牙调试助手:
波特律动 串口助手 (keysking.com)
OLED驱动库、图片字体取模:波特律动LED字模生成器 (baud-dance.com)
讲解视频【工作STM32】第10集 STM32串口DMA模式与收发不定长数据 | keysking的stm32教程_哔哩哔哩_bilibili
GPIOGPIO介绍GPIO是通用输入输出端口(General-purpose input/output)的英文简写,是所有的微控制器必不可少的外设之一,可以由STM32直接驱动从而实现与外部设备通信、控制以及采集和捕获的功能。STM32单片机的GPIO被分为很多组,每组有16个引脚,不同型号的MCU的GPIO个数是不同的,比如STM32F103C8T6只有PA、PB以及个别PC引脚而STM32F103ZET6拥有PA~PG的全部112个引脚。所有的GPIO都有基本的输入输出功能,同时GPIO还可以作为其它的外设功能引脚。
作为STM32最基本的外设,GPIO最基本的输出功能是由STM ...
1.Linux 目录结构Linux只有一个根目录叫: / 的文件夹,全部内容都在该文件夹下,开头总是 / 。
在Linux系统中,路径之间的层级关系,使用:/来表示
在Windows系统中,路径之间的层级关系,使用:\来表示
Linux例:/user/local/hello.txt(根目录/)
windows例:D\data\work\hello.txt(D盘)
注意:
开头的 / 表示 根目录
后面的 / 表示 层级关系
2.路径相对路径和绝对路径
cd /home/itheima/Desktop 绝对路径写法
cd Desktop 相对路径写法
绝对路径:以根目录(/)为起点,描述路径的一种写法,路径描述以 / 开头
相对路径:以当前目录为起点,描述路径的一种写法,路径描述无需以 / 开头
相对路径写法:./ 表示当前目录下,../ ...
1.socket套接字:概念:
局域网和广域网
局域网:局域网将一定区域内的各种计算机、外部设备和数据库连接起来形成计算机通信的私有网络。
广域网:又称广域网、外网、公网。是连接不同地区局域网或城域网计算机 通信的远程公共网络。
IP(Internet Protocol):本质是一个整形数,用于表示计算机在网络中的地址。IP 协议版本有两个:IPv4 和 IPv6
IPv4(Internet Protocol version4):
使用一个 32 位的整形数描述一个 IP 地址,4 个字节,int 型也可以使用一个点分十进制字符串描述这个 IP 地址: 192.168.247.135分成了 4 份,每份 1 字节,8bit(char),最大值为 2550.0.0.0 是最小的 IP 地址255.255.255.255 是最大的 IP 地址按照 IPv4 协议计算,可以使用的 IP 地址共有 2^32^ 个
IPv6(Internet Protocol version6):
使用一个 128 位的整形数描述一个 IP 地址,16 个字节也可以使用一个字符串描述这个 IP 地址 ...