开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 29146|回复: 539
收起左侧

[易源码分享] 鱼刺多线程模块例程 所有的类都会用吗?快进来学线程池

    [复制链接]

结帖率:100% (47/47)
发表于 2024-4-3 02:05:44 | 显示全部楼层 |阅读模式   江西省南昌市
分享源码
界面截图: -
是否带模块: -
备注说明: -
本帖最后由 明天自然醒 于 2024-4-3 13:29 编辑

今天当醒老师

写在前面,因为感叹多线程的魅力,所以把鱼刺大佬的模块都写了简单通俗的例子
我觉得,所有人,包括新手,都能看懂
详细代码注释 23个例程,覆盖95%以上的类的基本使用方法
QQ截图20240403020255.png
没学明白的也可以来学

没有视频,因为时间不够...今晚是挤出来的
很感谢论坛大佬们的开源,每个人应该都是不断看别人代码学习、进步的吧

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

学完之后,换上英特尔芯片体验多线程吧...
动手操作一下吧,不然不是自己掌握的东西


目录
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 增加 [什么时候不加读锁也可能会崩?]
鱼刺例程-初级.zip (1.47 MB, 下载次数: 2057)

点评

你是一个好人,大好人,大大的好人!   浙江省温州市  发表于 2024-5-11 21:25
期待 中级 和高级教程!   广东省深圳市  发表于 2024-4-11 21:59
工具-系统配置-编译-是否检查死循环   江西省南昌市  发表于 2024-4-3 17:18
大佬看看例子17??   新疆维吾尔自治区乌鲁木齐市  发表于 2024-4-3 12:15

评分

参与人数 64好评 +36 精币 +99 收起 理由
a657938016 + 1 + 2 支持开源~!感谢分享
学易语言的哦 + 1 + 2 感谢发布原创作品,精易因你更精彩!
welking + 1 + 2 感谢分享,很给力!~
就是那个秋 + 1 + 2 期待 中级 和高级教程
yiddy123 + 1 YYDS~!
勾栏听曲 + 1 + 2 很赞同,谢谢!
baitso + 1 + 2 感谢分享,很给力!~
司祭 + 1 + 1 感谢分享,很给力!~
cunanhai + 1 + 2 欢迎常来帮助新人,谢谢~
金少yy + 1 感谢分享,很给力!~
国王软件 + 1 + 3 新技能已get√
浮梦 + 1 感谢分享,很给力!~
TTVTT + 1 感谢分享,很给力!~
pj小黑屋 + 1 感谢分享,很给力!~
fangweipeng + 1 + 1 感谢发布原创作品,精易因你更精彩!
风雨3137 + 1 感谢分享,很给力!~
chuanqibuding + 1 很赞同,谢谢!
易语言资源网 + 1 + 3 开源精神必须支持~
feiaiyou + 1 + 1 感谢分享,很给力!~
jinn0316 + 1 + 2 支持开源~!感谢分享
a47785788 + 1 支持开源~!感谢分享
lumao1888 + 1 支持开源~!感谢分享
罗泠雨人 + 1 + 1 支持开源~!感谢分享
ppppzj + 1 + 2 支持开源~!感谢分享
403800569 + 1 + 2 新技能已get√
憨憨问号 + 1 YYDS~!
qq1056123185 + 1 + 2 牛逼啊,需要的就是例子,感谢大佬的分享~
小远大大 + 1 + 2 新技能已get√
空竹 + 1 + 3 感谢你的支持,精易有你更精彩
无风不起浪 + 1 + 2 支持开源~!感谢分享
ASSHOLE + 1 + 2 YYDS~!
种植 + 1 感谢分享,很给力!~
liangfeng988 + 1 + 2 很赞同,谢谢!
godandwoman + 1 + 2 支持开源~!感谢分享
文西哥 + 1 + 3 支持开源~!感谢分享
qiyuer + 1 感谢分享,很给力!~
Zźh926 + 1 感谢分享,很给力!~
pptk + 1 + 2 此处应该有鼓励~
84915659 + 1 + 2 支持开源~!感谢分享
3266167 + 1 感谢分享,很给力!~
t176 + 1 感谢分享,很给力!~
望尘莫及 + 1 感谢分享,很给力!~
qweipuq + 1 感谢分享,很给力!~
1828902364 + 1 感谢分享,很给力!~
※逍遥游※ + 1 感谢分享,很给力!~
聿聿 + 1 感谢分享,很给力!~
ewake + 1 感谢分享,很给力!~
ican8 + 1 感谢分享,很给力!~
旧梦dd + 1 + 2 YYDS~!
光影魔术 + 2 支持开源~!感谢分享
YzZA + 1 感谢分享,很给力!~
tan666 + 1 + 2 YYDS~!
XXGL2005 + 1 感谢分享,很给力!~
xintian + 1 + 1 流弊啊,看不懂还是看不懂哦!
星空漫步 + 1 + 2 感谢分享,很给力!~
kyo9766 + 1 感谢分享,很给力!~
keyi5566 + 1 感谢分享,很给力!~
龍貓 + 1 + 2 新技能已get√
无尘666 + 1 感谢分享,很给力!~
sinewtec + 1 + 5 感谢分享,很给力!~
哈拉哈拉 + 1 + 2 放手吧,别发了,我是学不会的
abpyu + 1 + 2 支持开源~!感谢分享
没事瞎琢磨 + 1 支持开源~!感谢分享
財財 + 1 感谢分享,很给力!~

查看全部评分


本帖被以下淘专辑推荐:

结帖率:100% (1/1)

签到天数: 5 天

发表于 8 小时前 | 显示全部楼层   河南省郑州市
感谢分享感谢分享
回复 支持 反对

使用道具 举报

结帖率:75% (3/4)

签到天数: 12 天

发表于 7 天前 | 显示全部楼层   河南省鹤壁市
感谢分享,学习让进步
回复 支持 反对

使用道具 举报

签到天数: 10 天

发表于 2024-11-13 18:19:13 | 显示全部楼层   重庆市重庆市
为啥每次都要积分你
回复 支持 反对

使用道具 举报

发表于 2024-11-13 09:20:03 | 显示全部楼层   广东省清远市
太好了,开抄!
回复 支持 反对

使用道具 举报

签到天数: 5 天

发表于 2024-11-11 16:11:40 | 显示全部楼层   河南省信阳市
期待 中级 和高级
回复 支持 反对

使用道具 举报

签到天数: 5 天

发表于 2024-11-11 16:11:25 | 显示全部楼层   河南省信阳市
        谢谢你的帮助~
回复 支持 反对

使用道具 举报

结帖率:9% (1/11)

签到天数: 9 天

发表于 2024-11-7 23:14:57 | 显示全部楼层   江苏省*
我只能说,工作太细致了
回复 支持 反对

使用道具 举报

签到天数: 7 天

发表于 2024-11-5 10:20:30 | 显示全部楼层   浙江省台州市
11111111111111111111111111111111111
回复 支持 反对

使用道具 举报

签到天数: 9 天

发表于 2024-11-4 21:27:18 | 显示全部楼层   黑龙江省哈尔滨市
回复 支持 反对

使用道具 举报

签到天数: 2 天

发表于 2024-11-1 18:13:41 | 显示全部楼层   广东省中山市
谢谢醒老师!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表