免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2671 | 回复: 10
打印 上一主题 下一主题

[Linux] 关于异步的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-08-19 20:28 |只看该作者 |倒序浏览
今天在查问题的时候,百度了下“异步”,里面看到了一句话,

如果执行部件用状态来通知,那么调用者就需要每隔一定时间检查一次,效率就很低(有些初学多线程编程的人,总喜欢用一个循环去检查某个变量的值,这其实是一种很严重的错误)。

然后脸红了一下午,翻遍了手里的书查关于异步的资料,从异步I/O到线程同步,到进程通信。还是晕乎乎的。
在一个线程里定期检查状态,状态对了做回调,不是很常见吗?
while(1)
{
      //暂时不考虑同步问题
      if(flag)
      {
            //do something...
            //get msg
            //switch(msg)
            //{case 1:
            //          callback();
            //          break;
            //.....
            //}
       }

       usleep(10*1000);
}

除了这样,还有其他更好的办法?不能总做初学者啊...
或者说,那句话里的异步和我说的异步不是同一概念?

论坛徽章:
0
2 [报告]
发表于 2013-08-19 20:33 |只看该作者
另外,想求一下可以看linux环境下编程的源代码(不是kernel的源代码,而是在linux环境下的应用程序代码,kernel源代码已经在看了。)
总是看本公司的代码,前篇一律的,感觉思维有点僵化啊,比如上面的问题,基本也就是创建一个线程去检查某设备的状态,然后干嘛干嘛...

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
3 [报告]
发表于 2013-08-20 10:40 |只看该作者
互联网开发中随处可见异步, 否则性能根本无法达标.

论坛徽章:
7
天蝎座
日期:2013-09-28 10:45:42双子座
日期:2013-10-16 16:27:09射手座
日期:2013-10-23 10:21:32处女座
日期:2014-09-17 16:44:332015年亚洲杯之巴林
日期:2015-04-09 17:28:01冥斗士
日期:2015-11-26 16:19:0015-16赛季CBA联赛之山东
日期:2018-03-02 23:59:31
4 [报告]
发表于 2013-08-20 11:18 |只看该作者
比如select就是 -- 一个循环去检查某个变量的值
      epoll就是回调
      以及信号驱动io

论坛徽章:
17
处女座
日期:2013-08-27 09:59:352015亚冠之柏太阳神
日期:2015-07-30 10:16:402015亚冠之萨济拖拉机
日期:2015-07-29 18:58:182015年亚洲杯之巴勒斯坦
日期:2015-03-06 17:38:17摩羯座
日期:2014-12-11 21:31:34戌狗
日期:2014-07-20 20:57:32子鼠
日期:2014-05-15 16:25:21亥猪
日期:2014-02-11 17:32:05丑牛
日期:2014-01-20 15:45:51丑牛
日期:2013-10-22 11:12:56双子座
日期:2013-10-18 16:28:17白羊座
日期:2013-10-18 10:50:45
5 [报告]
发表于 2013-08-20 13:51 |只看该作者
回复 1# henryele


    "异步“的含义太过抽象在不同的具体问题域其解释是有很大差异的。你引用的这句话”有些初学多线程编程的人,总喜欢用一个循环去检查某个变量的值,这其实是一种很严重的错误“很有问题,说出这样话的那个人也强不到哪儿去。不是所有程序都能直接对应到异步上的,很多“异步”处理模式的底层实现代码恰恰就用到了那个所谓很傻的“用一个循环去检查某个变量的值”的方法。

论坛徽章:
0
6 [报告]
发表于 2013-08-20 19:51 |只看该作者
回复 3# linux_c_py_php


    你的意思是限于网络编程这一块,有更好的办法,不应该这么干是吧?

论坛徽章:
0
7 [报告]
发表于 2013-08-20 19:57 |只看该作者
回复 5# myworkstation


    我很多时候在想这个问题,比如  异步I/O、 线程间的共享数据需同步 、 以及内核中的中断处理程序异步执行,这些涉及的概念是一样的吗?好模糊。

论坛徽章:
0
8 [报告]
发表于 2013-08-20 20:02 |只看该作者
回复 4# cxytz01


    那有没有其他好的方式呢,

    比如说,我做USB,就只是每隔1S  access  F_OK   一下。   看测试出来的状态是否可以连接。

    关于检测设备的状态,我的印象中好像就一直这么做,我们也不可能像设备本身一样可以主动向CPU发中断。

论坛徽章:
0
9 [报告]
发表于 2013-08-20 20:06 |只看该作者
回复 4# cxytz01


    poll 这个倒是没用到过,要先学下。

论坛徽章:
7
天蝎座
日期:2013-09-28 10:45:42双子座
日期:2013-10-16 16:27:09射手座
日期:2013-10-23 10:21:32处女座
日期:2014-09-17 16:44:332015年亚洲杯之巴林
日期:2015-04-09 17:28:01冥斗士
日期:2015-11-26 16:19:0015-16赛季CBA联赛之山东
日期:2018-03-02 23:59:31
10 [报告]
发表于 2013-08-21 10:49 |只看该作者
henryele 发表于 2013-08-20 20:02
回复 4# cxytz01


内核的东西不会。不过就这个话题和@myworkstation的回答,我引申一个简单的"异步"解决方案:
开启一个线程循环检查usb端口,其他线程做其他的事情。  
----这也算是异步吧?
     检测usb端口,和做其他事情相互不影响。
     其他线程不必非得等着检测usb端口完成才能处理自己的事情。
     检测usb端口活动,可以通过变量,或者信号通知其他线程、进程。

所以异步还是挺抽象的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP