线程模块
1. 积木功能说明
- 功能简介:创建一个子线程,独立于主程序之外单独运行,子线程没有停止时将无限循环。
参数说明:输入启用子线程的名称。
返回值:无。
- 功能简介:停止目标子线程。
参数说明:输入需要停止的子线程名称。
返回值:无。
2. 多线程使用说明
- 多线程是指从软件或硬件上实现多个线程并发执行的技术。具有多线程能力的计算机在同一时间执行多于一个线程,进而提升整体处理性能。在一个程序中,这些独立运行的程序片段叫作“线程”,利用它编程的概念叫作“多线程处理”。 比如播放电影时,就必须由一个线程播放视频,另一个线程播放音频,两个线程协调运作,画面和声音同步播放。
多线程有多种应用情况:
- 1.独立功能分离:两个毫无关联,需要独立运行的模块。
- 示例:两个按钮分别控制两个小灯开关。
- 实例:生活中,两个开关分别控制两个灯。
- 2.低耦合:线程之间功能相对独立,子线程产生的数据对主线程的规则和逻辑无影响。
- 示例:计时器计时,每1秒跳动一次显示,而子线程句号闪烁次数为0.5秒一次。
- 3.业务交互分离:多个线程运行依赖交互结果,业务线程和交互线程逻辑独立。
- 示例:物联网,按钮控制一个小灯。
- 实例:生活中,常见多个开关控制同一个灯。
- 4.实时响应功能:多个线程发出指令被实时接收,实时触发,实时中断。
- 示例:流水灯中,按钮实时控制灯带更改颜色,从头出发
- 实例:用户驾驶车辆拐弯时,方向盘一直发送指令控制拐弯,踩刹车时能够及时刹车,
3. 注意事项
- 线程相当于一个无限循环,如果没有停止该线程的指令,线程中的程序会一直运行下去。。
4. 积木块应用案例
- 多线程是一个非常方便的功能,不但可以更好地利用系统资源,在很多程序设计时,也可以巧妙的简化程序。
- 假设现在需要编写一个程序,需要一个树莓派同时控制两盏小灯,其中一盏0.3秒亮一次,而另一盏0.5秒亮一次,如果不使用子线程,我们该怎样实现这个程序呢?
(图1)一般实现程序
点击这里下载本案例代码。
这是使用最笨最直接的办法,对每个时间点的两个小灯状态做出规划,直到时间满足两小灯频率的最小公倍数使整个程序形成一个完整的循环,我们可以看出要实现像这样的两个速度不一致且互不相干的内容时程序会变得相当的冗余复杂,实现起来也相当不方便。
- 这时如果使用子线程,程序将会简单许多。
(图2)线程应用程序
点击这里下载本案例代码。
可以看出使用线程后程序简单了许多,我们利用子线程让控制小灯的两个程序分别运行,单独计算时间等参数,互不干扰,相当于两个树莓派在同时工作。
(图3)多线程控制小灯
点击这里下载本案例代码。
在以上程序中,“12号小灯”和“16号小灯”两个函数是两个相互独立的线程,,24和25号按钮分别控制12号16号小灯的亮灭,两个线程的业务和逻辑未发生任何交互,这是一个典型的业务分离的多线程程序。
(图4)单线程控制小灯
点击这里下载本案例代码。
相较于多线程,单线程要实现相同的功能,代码就会复杂冗余许多,在以上程序中,小灯由于需要等待时间,会阻塞后续程序的运行。
- 独立功能分离多线程程序,由于程序分为多线程运行,代码简洁;可读性强,每个模块代码独立相对冗杂单线程代码,更容易理解;模块相互独立,修改代码更加简单,只需要修改相应模块代码即可。