导读
易语言5.6完美版,可静态编译,绿色无后门

学习易语言 讲究的是系统,如果你正在四处闲逛,你懂的永远是皮毛! 觅风论坛正在为每个困惑的对易语言 详细

[源码] 鱼刺多线程模块调用例程详细讲解所有多线程操作命令使用教程源码

[复制链接]

微信扫一扫 分享朋友圈

fh330jj 发表于 2024-4-3 09:01:44 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

马上注册,结交更多易友,享用更多功能,让你轻松玩转觅风论坛。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
鱼刺多线程模块调用例程详细讲解所有多线程操作命令使用教程源码,



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. 原子锁
        ' 原子锁就是一个加了锁的共享变量
        ' 但是鱼刺模块只实现了整数型的
        ' 不过...大佬都说易语言整数型是万能的...
        ' 指针...

QQ截图20240403091831.jpg


QQ截图20240403091716.jpg





游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

精彩评论5

yu2353173832 发表于 2024-4-4 16:33:58 | 显示全部楼层
多上传一点源码
回复 支持 反对

使用道具 举报

sdf 发表于 2024-4-6 00:06:13 | 显示全部楼层
谢谢大人的分享
回复 支持 反对

使用道具 举报

小一 发表于 2024-4-7 07:38:27 | 显示全部楼层
666学习了!!
回复 支持 反对

使用道具 举报

a491198538 发表于 7 天前 | 显示全部楼层
顶一个了
回复 支持 反对

使用道具 举报

佳佳 发表于 6 天前 | 显示全部楼层
支持!!!!前排!!!!
回复 支持 反对

使用道具 举报

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

本版积分规则

关注我们:觅风论坛与你快乐分享

收藏本站

用心服务做个非盈利公益编程网站

www.eyyba.com

服务人:觅风论坛

Email:eyyba@foxmail.com

Powered by WWW.EYYBA.COM X3.4© 2001-2023 Inc.   版权所有   

觅风论坛  疆ICP备15020893号-1