前言:多线程在目前我所接触任何程序语言开发过程中都算是比较难为理解和实际着手操作的。仅此以一篇较长的个人理解来让大家在学习上有点可鉴之处,拙见之处还请忽视
1.什么是多线程
每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。进程也可能是整个程序或者是部分程序的动态执行。线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行。也可以把它理解为代码运行的上下文。所以线程基本上是轻量级的进程,它负责在单个程序里执行多任务。通常由操作系统负责多个线程的调度和执行。线程是程序中一个单一的顺序控制流程 . 在单个程序中同时运行多个线程完成不同的工作 , 称为多线程 .
线程和进程的区别在于 , 子进程和父进程有不同的代码和数据空间 , 而多个线程则共享数据空间 , 每个线程有自己的执行堆栈和程序计数器为其执行上下文 . 多线程主要是为了节约 CPU 时间 , 发挥利用 , 根据具体情况而定 . 线程的运行中需要使用计算机的内存资源和 CPU。
上述理解可能比较官方:这里我简化下
程序是由于 控制+循环+流程 等一系列的由我们按照自己想法去编写的指令集合的表现,程序的可视化表现就是我们根据不同编程语言语法要求将指令整体打包出来的表现,例如.exe、.py等等…….
程序的执行—-由机器通过解释器编译器等将我们的编写的程序语言指令通过翻译成机器代码-二进制信号-电路信号-最终按照预设结果运行。
一个程序打开便是一个进程,例如微信运行起来就是一个进程跑起来了,而一个进程有控制着多个线程,例如微信运行的时候,我们查看好友头像,好友消息,好友列表读取,这都是在一个进程中的不同线程运行结果。
线程是进程中的一个实体,是被系统独立调度和分派的基本单位
多线程是什么?
每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。进程也可能是整个程序或者是部分程序的动态执行。线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行。也可以把它理解为代码运行的上下文。所以线程基本上是轻量级的进程,它负责在单个程序里执行多任务。通常由操作系统负责多个线程的调度和执行。线程是程序中一个单一的顺序控制流程 . 在单个程序中同时运行多个线程完成不同的工作 , 称为多线程 .
多线程是指在一个程序中同时运行多个线程,每个线程都独立执行不同的任务。多线程的运行原理涉及到线程的创建、调度和同步等方面。
拿易语言程序来说,多线程=主线程+(由主线程控制的循环启动各项子程序)
简单点说:
一个线程事件控制的循环 该循环内一次次按照预设控制流程指令走完代码 这就是循环的一个单线程事件
一个线程时间控制循环,而这个循环内去发出重复请求去激活子事件 每个事件单一执行跑完,这就是多线程。
多线程的好处是什么,能够有效调度CPU资源的利用率,一个单位时间执行多个事件。
2.并发、并行
这里很多小伙伴们都会有不同的理解,并发是真正意义上的线程时间同步运行不分阶段的同步由不同的资源分区进行(这就是所谓的电脑几核几G中核的意义),并行实际上是各个子事件同时启动时,不同资源分区已经对不同线程上事件顺序进行分割进行阶段性完成任务,比如子事件是账号注册,A事件走到了验证码发送,B事件到了提交登录,这时候由于优先级算法处理A在这个段完成A此时任务B在那个段晚上B此时任务,而这在我们感官上可能只要有0.01秒甚至更低的时间差,这就是并行!{所以有时候不同机器上同一个程序执行的效果不同 你开50线程电脑已经开始风扇哗哗的,别人开1000还是轻轻松松,这根本上说硬件脑力问题的差距。当然你会说别人写的程序200线程在我电脑上跑起来没压力,而我自己写的50够呛,这就是你与高手的差别,细节+代码贴近底层原理原始线程函数等等…….}
什么是进程?
当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源。
而一个进程又是由多个线程所组成的。
什么是线程?
线程是程序中的一个执行流,每个线程都有自己的专有寄存器 ( 栈指针、程序计数器等 ) ,但代码区是共享的,即不同的线程可以执行同样的函数。
什么是多线程?
多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,也就是说允许单个程序创建多个并行执行的线程来完成各自的任务。
多线程的好处:
可以提高 CPU 的利用率。在多线程程序中,一个线程必须等待的时候, CPU 可以运行其它的线程而不是等待,这样就大大提高了程序的效率。
多线程的不利方面:
线程也是程序,所以线程需要占用内存,线程越多占用内存也越多;
多线程需要协调和管理,所以需要 CPU 时间跟踪线程;
线程之间对共享资源的访问会相互影响,必须解决竞用共享资源的问题;
3.多线程总概
多线程是指在一个程序中同时运行多个线程,每个线程都有自己的执行路径。多线程的原理主要涉及到以下几个方面:
1. 线程和进程:线程是进程的一部分,一个进程可以拥有多个线程。线程共享进程的资源,如内存空间和文件句柄等;而每个线程有自己的栈空间和寄存器等。
2. 并发和并行:并发指多个任务同时执行,并行指多个任务同时执行并且物理上同时进行。多线程可以实现并发执行多个任务。
3. 上下文切换:多线程在运行过程中,由于线程的切换,会导致上下文的切换。上下文切换是指在一个线程执行完毕后,操作系统将该线程的状态保存起来,并加载下一个线程的状态,以便于继续执行。
4. 竞争条件:多线程的执行是异步的,多个线程可能会同时访问共享数据,这样就会出现竞争条件。为了避免竞争条件造成的问题,需要使用同步机制,例如锁和信号量等。
5. 线程调度:操作系统控制着多个线程的调度,以保证各个线程能够公平地使用资源。线程调度算法决定了每个线程在什么时候执行,分配给线程的时间片大小等。
总之,多线程的原理主要包括线程与进程的关系、并发与并行 的概念、上下文切换、竞争条件和线程调度等。通过合理地利用多线程,可以提高程序的执行效率和资源利用率。
目前易语言的常见两种多线程就是精易多线程与鱼刺多线程---- 精易特点:小并发、程序稳定、内存释放序自行添加函数代码、但是理解起来简单、代码成本小。 鱼刺特点:封装成熟、设计知识点多、代码理解不易、适合高并发需求----鱼刺原作者主页(有兴趣的朋友可以多关注下)传送门
这里我链接上往期的鱼刺和精易的多线程写法讲解视频给大家 视频录制较早,细节有些还值得补充增加 后期随着自己的理解能力提升 我会重新给大家详细讲讲