aardio 官方社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 7909|回复: 5

arr与js的单线程异步任务队列的比较与疑问

[复制链接]

34

主题

30

回帖

390

积分

新手入门

积分
390
发表于 2018-4-16 09:47:30 | 显示全部楼层 |阅读模式
在JS中,添加到异步任务队例的任务是按正序逐个执行的:(在chrome中F12运行测试)
  1. setTimeout(function(){console.log("1.吃晚饭")},0)
  2. setTimeout(function(){console.log("2.看电影")},0)
  3. setTimeout(function(){console.log("3.洗澡")},0)
  4. setTimeout(function(){console.log("4.睡觉")},0)
  5. console.log("上班")
  6. for(let i=1;i<=10;i++){
  7.     console.log("写代码"+i)
  8. }
  9. console.log("下班")
复制代码


输出:
上班
写代码1
写代码2
写代码3
写代码4
写代码5
写代码6
写代码7
写代码8
写代码9
写代码10
下班
1.吃晚饭
2.看电影
3.洗澡
4.睡觉

在AAR中,添加到异步任务队例的任务是按倒序逐个执行的:

  1. import win.ui;
  2. /*DSG{{*/
  3. var winform = win.form(text="aardio form";right=759;bottom=469)
  4. winform.add()
  5. /*}}*/

  6. import console;

  7. //放入异步任务队列,主线程空闲时再执行
  8. winform.setTimeout(function(){
  9.         console.log("1.吃晚饭");
  10. },0)

  11. //放入异步任务队列,主线程空闲时再执行
  12. winform.setTimeout(function(){
  13.         console.log("2.看电影");
  14. },0)

  15. //放入异步任务队列,主线程空闲时再执行
  16. winform.setTimeout(function(){
  17.         console.log("3.洗澡");
  18. },0)

  19. //放入异步任务队列,主线程空闲时再执行
  20. winform.setTimeout(function(){
  21.         console.log("4.睡觉");
  22. },0)

  23. //放入同步任务队列,立即执行
  24. console.log("上班");

  25. //放入同步任务队列,立即执行
  26. for(i=1;10;1){
  27.         console.log("写代码",i);
  28. }

  29. //放入同步任务队列,立即执行
  30. console.log('下班\r\n---------');

  31. winform.show()
  32. win.loopMessage();
复制代码


输出:
上班
写代码  1
写代码  2
写代码  3
写代码  4
写代码  5
写代码  6
写代码  7
写代码  8
写代码  9
写代码  10
下班
---------
4.睡觉
3.洗澡
2.看电影
1.吃晚饭

疑问:为什么AAR中添加到异步任务队列的任务是按倒序执行的?


170

主题

2169

回帖

1万

积分

管理员

积分
13161
发表于 2018-4-16 13:37:19 | 显示全部楼层
你真是闲的蛋痛,哪有人会用setTimeOut来排序,定时器本来就不是绝对精确的。
aardio 当然不可能跟 javascript 百分百的一模一样,没有为什么。想知道为什么那你为什么不去看 win.form 的源代码,本来就是开源的。

0

主题

21

回帖

167

积分

一级会员

积分
167
发表于 2018-4-16 16:52:45 | 显示全部楼层
基于setTimeout的特性,有一种简单易懂的排序算法,叫“延时排序法”.
它的算法思路是:对于输入数组array,对于数组中的每个数字,setTimeout对应的秒数后再把自己的,再将自己所对应的数字加到一个新的数组里面就可以了。

170

主题

2169

回帖

1万

积分

管理员

积分
13161
发表于 2018-4-16 17:20:38 | 显示全部楼层
vikon 发表于 2018-4-16 16:52
基于setTimeout的特性,有一种简单易懂的排序算法,叫“延时排序法”.
它的算法思路是:对于输入数组array ...
行了行了,aardio不是万能的,要是数字太大你准备排序到明年么

0

主题

21

回帖

167

积分

一级会员

积分
167
发表于 2018-4-16 17:42:35 | 显示全部楼层
Jacen.He 发表于 2018-4-16 17:20
行了行了,aardio不是万能的,要是数字太大你准备排序到明年么
误会了,那个是一个调侃的蛋疼算法。。。
事实上,我是在试过了vb6,dotnet, go, nwjs, electron这些后才找到了aardio. 才发现这个才是理想中的桌面应用开发环境。感觉就是,短小精悍,简单高效。

170

主题

2169

回帖

1万

积分

管理员

积分
13161
发表于 2018-4-16 17:57:14 | 显示全部楼层
vikon 发表于 2018-4-16 17:42
误会了,那个是一个调侃的蛋疼算法。。。
事实上,我是在试过了vb6,dotnet, go, nwjs, electron这些后才 ...

这些就扯远了,

那我给你一个数组
0x1FFFFFFFFFFFFF,0x1FFFFFFFFFFFFE,0.1,0.00001,1,2,3
你发一下简单易懂的“延时排序法”的具体代码看看,即然你会那么多编程语言,这简单易懂的算法你分别发一下,也许lacker会有兴趣。
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|aardio.com|aardio 官方社区 ( 皖ICP备09012014号 )

GMT+8, 2024-10-4 20:40 , Processed in 0.071765 second(s), 22 queries .

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

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