查看: 4049|回复: 3

[易语言源码]鱼刺多线程模块例程

[复制链接]

[易语言源码]鱼刺多线程模块例程[复制链接]

wen7029639 发表于 2024-5-11 08:08:33 [显示全部楼层] 回复:  3 浏览:  4049

020310cqote2aqtc6aeae4.png

[易语言源码]说明:

写在前面,因为感叹多线程的魅力,所以把鱼刺大佬的模块都写了简单通俗的例子


我觉得,所有人,包括新手,都能看懂


详细代码注释 23个例程,覆盖95%以上的类的基本使用方法




没学明白的也可以来学


没有视频,因为时间不够...今晚是挤出来的


很感谢论坛大佬们的开源,每个人应该都是不断看别人代码学习、进步的吧


可能算重复轮子...不过能把鱼刺模块抛出来,引起大家的学习动机


学完之后,换上英特尔芯片体验多线程吧...


动手操作一下吧,不然不是自己掌握的东西


目录


0A 线程池


        ' 新手快来看看线程池的基本例子吧


        ' 如果按顺序执行一个循环,界面是不是会卡死,动不了?


        ' 你可以在循环里面加 处理事件()


        ' 但是拖动窗口的时候依然会卡


        ' 怎么办呢?


        ' 开线程!


        ' 请看 实例【17. 线程操作】


        ' ...


        ' 好了,现在,假设你看完了,


        ' 如果不开线程,那么,每个任务必须等待前一个任务完成后才能开始


        ' 现在开了一个线程,是不是就不占用窗口绘制了,你的鼠标可以干你的事情,你的任务在后台慢慢跑


        ' 那么我是不是可以在后台开多个线程呢?


        ' 可以,请看线程池


        ' 假如有100个任务,但是你的服务器配置很拉,只能开4个线程


        ' (线程不是越多越好,一般看CPU核心数,Windows系统下,任务管理器-性能-逻辑处理器)


        ' 那我就创建一个管理线程的工具,它叫线程池


        ' 这个时候,100个任务就在后台并发执行了


        ' 线程池,启动


0B. 队列


        ' 队列。就是有一只队伍,按照队伍排队顺序,依次执行


        ' 鱼刺类队列是线程安全的,也就是说,多线程里面,可以直接调用


        ' 现在的实例是:假如有1000个任务,但是你的服务器只能开4个线程(配置很拉)(线程不是越多越好,一般看CPU核心数,Windows系统下,任务管理器-性能-逻辑处理器)


        ' 这些任务呢,不可以直接传进线程里面,那就用队列。


        ' 先把1000个任务放进队伍里面,然后让这四个线程按自己的能力去分配


0C 线程池 - 实例2


1. 临界许可1


        ' 临界许可第一个用法,线程排队执行


        ' 某种情况下,所有线程不能并发执行,必须排队执行。


        ' 也可以用队列,在不方便使用队列的情况下,可以用这个临界许可


2. 临界许可2


        ' 临界许可第二个用法,防止资源访问冲突


        ' 多个线程同时修改程序集变量、全局资源,需要加锁,也就是写锁。


        ' 这时候用临界许可,在防止资源访问冲突的情况下,临界许可范围要写得很窄,提高允许效率


        ' 某些情况下(访问类、或者全局),需要加读锁,有时候不加可能会导致崩溃。


3. 哈希表 快速去重、查重、查表


        ' 哈希表是一种结构。通俗一点,通过一个数学函数,将一个东西变成一串代码,这个运算是非常快的,而且每个东西对应的代码都不一样


        ' 然后通过一系列操作,可以用在查重、去重上面


        ' 也包括,类似数据库里面的cha询,查表


4. 定时器队列


        ' 顾名思义,创建多个线程,这些线程排队执行,而且是延迟执行的


5. 定时器队列实例


        ' 网易云用过吧,播放列表,一首歌播完,接着下一首


6. 定长队列实例 定长栈


        ' 通俗地讲,一个队伍里面,只能有固定数量的人


        ' 所有人排成一队,新的人进来了,最前面的人就得出队


        ' 比如说,浏览器的历史记录,最多能装5条。再多了,内存就炸了


        ' 这个时候,你就得限制历史记录的数量


        ' 那我现在创建一个定长队列


        集_定长队列.创建 (5)  ' 数量为5


' 定长栈


        ' 先进后出,最先压入的成员,地位最难动摇,最后加进去的,一不小心就丢了饭碗


7. 鱼刺类_计时


        写个例子,用汇编加法和普通加法比较


8. 读写锁


        ' 读写锁跟临界许可类似,防止资源访问冲突


        ' 多个线程同时修改程序集变量、全局资源,需要加锁,也就是写锁。


        ' 这时候用临界许可,在防止资源访问冲突的情况下,临界许可范围要写得很窄,提高允许效率


        ' 某些情况下(访问类、或者全局),需要加读锁,有时候不加可能会导致崩溃。


9. 缓冲区


        ' 顾名思义,就是缓存,而且不能多线程用*(非线程安全)的缓存




10. 内存操作


        ' 内存操作,易语言的命令大部分有多次内存分配与释放


        ' 直接使用内存操作,加快速度


        ' 但你要确保内存安全hh,不能泄露,也不能读到非法内存


        ' 否则程序就崩


11. 内存共享


        ' 通俗地讲,就是两个程序之间发信息


        ' 用于跨进程的通信,通过内存映射,还有别的方法,论坛上开源有管道、socket。




12. 鱼刺类_时钟


        ' 普通定时器,跟易语言的一样


13. 事件


        ' 在多个线程中,事件是一种同步机制


        ' 让所有的线程都等待你的命令


        ' 这个命令可以是别的条件,不一定是你手动触发的,可以是代码触发的,比如今天下雨了才触发


        ' 比如多个线程可能需要等待某个初始化操作完成才能继续执行,可以使用事件来同步这些操作


14. 同步组


        ' 同步组与事件类似


        ' 在多个线程中,事件是一种同步机制


        ' 让所有的线程都等待你的命令


        ' 这个命令可以是别的条件,不一定是你手动触发的,可以是代码触发的,比如今天下雨了才触发


        ' 比如多个线程可能需要等待某个初始化操作完成才能继续执行,可以使用事件来同步这些操作


15. 完成端口


        ' 用于高性能IO操作的同步机制


        ' 将文件句柄、socket句柄等IO对象与之关联


        ' 线程可以通过完成端口来同时监控多个IO操作,而不需要为每个操作单独阻塞或轮询


16. 线程附加数据


        ' _附加数据 是程序集变量吧?也就是共享数据,对不对?


        ' 但是你看下面的例子,三个线程同时访问附加数据,得到的值都不一样


        ' 为什么?


        ' 虽然它是程序集变量,但是每个线程里面,它都有自己对应的副本,所以各个线程互不影响


17. 线程操作


        ' 就是创建一个线程...


        ' 和易语言的启动线程一样,不过功能肯定更强大


18. 信号量


        ' 信号量也是种同步机制


        ' 用来限制可以同时访问某个资源的线程数量


        ' 比如说,资源只有1份,但是有8个人去抢,看谁能抢到


        ' 那就用信号量


        ' 它可以跨进程


19. 原子锁


        ' 原子锁就是一个加了锁的共享变量


        ' 但是鱼刺模块只实现了整数型的


        ' 不过...大佬都说易语言整数型是万能的...


        ' 指针...


20. 什么时候不加读锁也可能会崩?


        ' 会导致程序崩溃的例子


        ' 不加读锁,可能不会出错,也不会崩


        ' 但是有几率出错!并且有几率崩溃!


        ' 如果一开始没报错,那就终止调试,再多调试几次


        ' 你会发现,一开始启动的时候是最容易出错的


        ' 可能是出错了,但是程序没崩


        ' 也可能是数组越界了,程序崩了


学习无价

2024/4/3 增加 [什么时候不加读锁也可能会崩?]


[易语言源码]下载:
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

提取码:e4a8 
下载次数:0    状态:您未购买  售价:2金粒
下载权限: 新手上路  以上或 赞助会员   [赞助获得会员]   [赞助获得金粒]  [免费赚金粒]



本站版权声明及免责声明1,本文内容仅代表作者本人观点,不代表本网站立场,作者文责自负!
(本站资源仅供学习研究,请勿非法使用,否则后果自负!请下载后24小时内删除!)
2,本文内容及相关资源来源于网络,版权归版权方所有!本站原创内容版权归本站所有,请勿转载!
3、本文内容,包括但不限于E4A软件、学习教程、E4A源码、图片等,仅供参考使用!
(本站不对其安全性,正确性等作出保证。但本站会尽量审核用户发表的内容!)
4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任。
5、本站一律禁止以任何方式发布或转载任何违法的相关信息,并且本站管理员和版主有权不事先通知发贴者而删除本文。
6、如您认为本文内容侵犯了您的权益,请与我们联系!我们将在5个工作日内做出处理!本站保留全部修改、解释、更新本声明的权利。E4A源码网站
7、本站资源大多存储在云盘,如发现链接失效,可以点帖子右下角的举报进行反馈,我们会第一时间更新。

回复

使用道具 举报

0

主题

37

帖子

106

积分

注册会员

Rank: 2

积分
106
神鲸大侠 发表于 2024-5-11 08:15:50 显示全部楼层
楼主,你是一个大好人!
回复 支持 反对

使用道具 举报

0

主题

30

帖子

86

积分

注册会员

Rank: 2

积分
86
土豪 发表于 2024-5-11 08:34:19 显示全部楼层
看了看,感觉E4A中文站的E4A教程简单易懂
回复 支持 反对

使用道具 举报

0

主题

33

帖子

95

积分

注册会员

Rank: 2

积分
95
淡淡青花刺 发表于 2024-5-11 08:58:14 显示全部楼层
看起来不错
回复 支持 反对

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1
QQ