发新帖本帖赏金 3.00元(功能说明)我要提问
返回列表
打印

事件驱动构架

[复制链接]
楼主: Simon21ic
手机看帖
扫描二维码
随时随地手机跟帖
21
a20084666| | 2015-8-20 12:17 | 只看该作者 回帖奖励 |倒序浏览
Simon21ic 发表于 2015-8-20 09:29
既然说到书,我推荐一本《玩转微控制器多任务程序设计》,我的一个朋友写的第二本,据说年底出版。 ...

那么问题来了,第一本是什么书

使用特权

评论回复
22
Simon21ic|  楼主 | 2015-8-20 12:58 | 只看该作者
a20084666 发表于 2015-8-20 12:17
那么问题来了,第一本是什么书

《深入浅出AVR单片机 -- 从ATmega48/ATmega88/ATmega168开始》
不过已经卖完

使用特权

评论回复
23
GZZXB| | 2015-8-20 13:19 | 只看该作者
我想知道是傻孩子还是ne5532:lol

使用特权

评论回复
24
keer_zu| | 2015-8-20 13:24 | 只看该作者
GZZXB 发表于 2015-8-20 13:19
我想知道是傻孩子还是ne5532

给个链接呗

使用特权

评论回复
25
GZZXB| | 2015-8-20 13:36 | 只看该作者
啥链接

使用特权

评论回复
26
a20084666| | 2015-8-20 15:25 | 只看该作者

百度后发现是傻孩子

使用特权

评论回复
27
Simon21ic|  楼主 | 2015-8-20 17:23 | 只看该作者
本帖最后由 Simon21ic 于 2015-8-20 17:25 编辑
yyy71cj 发表于 2015-8-20 16:06
写书不是怕人评论,而是怕人不着边际的评论。没有人可以追求100%的完美,更不可能追求到100% ...

对于适合初学者的书,往往给好评的是初学者,而不是行家里手比如,如果我评价的话,也不会给好评,因为这本书不适合我

使用特权

评论回复
28
keer_zu| | 2015-8-21 17:30 | 只看该作者
设计模式有 Reactor。

标准的经典的 Reactor模式:

步骤 1) 等待事件 (Reactor 的工作)
步骤 2) 发"已经可读"事件发给事先注册的事件处理者或者回调 ( Reactor 要做的)
步骤 3) 读数据 (用户代码要做的)
步骤 4) 处理数据 (用户代码要做的)
模拟的Proactor模式:

步骤 1) 等待事件 (Proactor 的工作)
步骤 2) 读数据(看,这里变成成了让 Proactor 做这个事情)
步骤 3) 把数据已经准备好的消息给用户处理函数,即事件处理者(Proactor 要做的)
步骤 4) 处理数据 (用户代码要做的)

使用特权

评论回复
29
keer_zu| | 2015-8-21 17:31 | 只看该作者
Reactor这个词译成汉语还真没有什么合适的,很多地方叫反应器模式,但更多好像就直接叫reactor模式了,其实我觉着叫应答者模式更好理解一些。通过了解,这个模式更像一个侍卫,一直在等待你的召唤,或者叫召唤兽。

并发系统常使用reactor模式,代替常用的多线程的处理方式,节省系统的资源,提高系统的吞吐量。

先用比较直观的方式来介绍一下这种方式的优点,通过和常用的多线程方式比较一下,可能更好理解。
以一个餐饮为例,每一个人来就餐就是一个事件,他会先看一下菜单,然后点餐。就像一个网站会有很多的请求,要求服务器做一些事情。处理这些就餐事件的就需要我们的服务人员了。

在多线程处理的方式会是这样的:
一个人来就餐,一个服务员去服务,然后客人会看菜单,点菜。 服务员将菜单给后厨。
二个人来就餐,二个服务员去服务……
五个人来就餐,五个服务员去服务……

这个就是多线程的处理方式,一个事件到来,就会有一个线程服务。很显然这种方式在人少的情况下会有很好的用户体验,每个客人都感觉自己是VIP,专人服务的。如果餐厅一直这样同一时间最多来5个客人,这家餐厅是可以很好的服务下去的。

来了一个好消息,因为这家店的服务好,吃饭的人多了起来。同一时间会来10个客人,老板很开心,但是只有5个服务员,这样就不能一对一服务了,有些客人就要没有人管了。老板就又请了5个服务员,现在好了,又能每个人都受VIP待遇了。

越来越多的人对这家餐厅满意,客源又多了,同时来吃饭的人到了20人,老板高兴不起来了,再请服务员吧,占地方不说,还要开工钱,再请人就攒不到钱了。怎么办呢?老板想了想,10个服务员对付20个客人也是能对付过来的,服务员勤快点就好了,伺候完一个客人马上伺候另外一个,还是来得及的。综合考虑了一下,老板决定就使用10个服务人员的线程池啦~~~

但是这样有一个比较严重的缺点就是,如果正在接受服务员服务的客人点菜很慢,其他的客人可能就要等好长时间了。有些火爆脾气的客人可能就等不了走人了。

Reactor如何处理这个问题呢:
老板后来发现,客人点菜比较慢,大部服务员都在等着客人点菜,其实干的活不是太多。老板能当老板当然有点不一样的地方,终于发现了一个新的方法,那就是:当客人点菜的时候,服务员就可以去招呼其他客人了,等客人点好了菜,直接招呼一声“服务员”,马上就有个服务员过去服务。嘿嘿,然后在老板有了这个新的方法之后,就进行了一次裁员,只留了一个服务员!这就是用单个线程来做多线程的事。

实际的餐馆都是用的Reactor模式在服务。一些设计的模型其实都是从生活中来的。

Reactor模式主要是提高系统的吞吐量,在有限的资源下处理更多的事情。

在单核的机上,多线程并不能提高系统的性能,除非在有一些阻塞的情况发生。否则线程切换的开销会使处理的速度变慢。就像你一个人做两件事情,1、削一个苹果。2、切一个西瓜。那你可以一件一件的做,我想你也会一件一件的做。如果这个时候你使用多线程,一会儿削苹果,一会切西瓜,可以相像究竟是哪个速度快。这也就是说为什么在单核机上多线程来处理可能会更慢。

但当有阻碍操作发生时,多线程的优势才会显示出来,现在你有另外两件事情去做,1、削一个苹果。2、烧一壶开水。我想没有人会去做完一件再做另一件,你肯定会一边烧水,一边就把苹果削了。

理论的东西就不多讲了,请大家参考一下附件《reactor-siemens.pdf》。图比较多,E文不好也可以看懂的。

使用特权

评论回复
30
Simon21ic|  楼主 | 2015-8-21 20:28 | 只看该作者
keer_zu 发表于 2015-8-21 17:30
设计模式有 Reactor。

标准的经典的 Reactor模式:

是的,事件驱动并不是新概念,即使在嵌入式领域
不过,嵌入式中,事件驱动构架和操作系统往往只在一些专用系统中有,或者只是系统的一部分

使用特权

评论回复
31
Simon21ic|  楼主 | 2015-8-22 17:57 | 只看该作者
本帖最后由 Simon21ic 于 2015-8-22 18:00 编辑
yyy71cj 发表于 2015-8-22 16:36
其实,裸编程与嵌入式,还是有区别的。
        裸编程是平地建高楼,嵌入式是在人家的基础之上 ...

好坏本身就有很大的主观因素,评价的标准应该都是对自己是否有用
如果我已经掌握这本书里的思想的话,那么对我来说,相对客观的评价标准是,就这个思想而言,是否阐述足够深入。而引导初学者的方式,在我这里并没有加分。但是对初学者来说,就不同了。
而且,我也说了很清楚了,对于已经天天用这种开发思想的人来说,估计不会给好评。对于初学者,估计会给好评,这个已经是相对客观的角度说了。而且,把我觉得的问题都和你说了。
请不要在这个问题上纠缠了,我不再回复。
如果非要再说的话,那我承认你的书很好,老少皆宜总行了吧。
貌似微软的windows8就没多少好评,不管在国内还是在国外。
虽然windows8的开发理念非常好,但是没用,消费者评估的方法都是对自己是否有用,和国家,环境,信仰都没太大关系

使用特权

评论回复
32
Simon21ic|  楼主 | 2015-8-22 18:55 | 只看该作者
我发这个帖子只是为了讨论技术,可以把状态机轮询构架和状态机事件驱动构架来比较。
不过貌似没有太多人对这种构架的东西感兴趣

使用特权

评论回复
33
Simon21ic|  楼主 | 2015-8-23 11:27 | 只看该作者
本帖最后由 Simon21ic 于 2015-8-23 13:03 编辑
yyy71cj 发表于 2015-8-23 07:21
你也算是文人,怎么会把意思这样去解释呢???你以为我会强迫一个人来为我的书好评???算 ...

我从来没说过我是文人,我只是工程师,这里发帖的不都是工程师吗?
看你一再纠结好评的问题,也并没有讨论技术相关的问题,所以实在不想在这个上面浪费时间
对于你来说不是什么新奇的东西,对于我来说还是很有意思的
既然这样,那就只讨论技术问题,我懒得回复其他东西

另外,只要给出理由,欢迎对我的构架任何差评,本身构架的东西,都是一步一步完善起来的
难得看到有论坛可以讨论构架的东西,那我就多发一些好玩,然而并没有乱用的东西吧





使用特权

评论回复
34
keer_zu| | 2015-8-24 10:43 | 只看该作者
yyy71cj 发表于 2015-8-23 16:49
既如此,也是同道中人。评价并不重要,重要的只是评价的态度,其他的就不说了吧。我等着你的高论帖…… ...

所言极是。

使用特权

评论回复
35
1021352522| | 2015-8-24 11:18 | 只看该作者
我觉得凤舞天的MSOS不错!!!!,

使用特权

评论回复
36
Simon21ic|  楼主 | 2015-8-24 13:04 | 只看该作者
1021352522 发表于 2015-8-24 11:18
我觉得凤舞天的MSOS不错!!!!,

以前和他聊过,他的系统比较适合初学者,以及需要快速应用开发的公司
Ucos,freertos等其他系统也都不错,各个构架都有自己的优势和劣势

使用特权

评论回复
37
jinzhan0132| | 2015-8-24 17:42 | 只看该作者
想看一下各位大神讨论下“状态机轮询构架和状态机事件驱动构架”

使用特权

评论回复
38
keer_zu| | 2015-8-25 09:37 | 只看该作者
yyy71cj 发表于 2015-8-17 20:34
软件的发展,中国人可以说是摸了几十年的石头,最后干脆就不摸了,走哪儿算哪儿,有淹死的, ...

余兄,我发现之前我老是和大家一样吐槽天朝产品业余,没有原创,文学作品垃圾。然而,出来个大疆,出来个《三体》,虽然少,但总是开了个头。对于未来我还是很乐观的。与其吐槽,不如一起加入到创造的行列。

使用特权

评论回复
39
forthlab| | 2015-8-25 23:04 | 只看该作者
收藏

使用特权

评论回复
40
keer_zu| | 2015-8-26 11:00 | 只看该作者
yyy71cj 发表于 2015-8-25 09:42
这两天忙,但是我还想回复你一句:你这想法,数千年前就有了……

数千年前?:funk:

使用特权

评论回复
发新帖 本帖赏金 3.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则