免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: MJK2012
打印 上一主题 下一主题

[自制操作系统研究] 今天设计异步调用的机制, 发现了一些基本原理.. [复制链接]

论坛徽章:
0
11 [报告]
发表于 2012-03-20 13:58 |只看该作者
本帖最后由 MJK2012 于 2012-03-21 13:36 编辑

回复 6# isscc

coroutine其实就是状态机模式.


看我文中描述的:

所以, 异步函数语言, 实际上, 是一种用 结构化编程 来表示多个异步任务 的语言.

原本多个任务, 是需要写成多个函数, 或者是单个函数下用状态机来实现分支.

但是现在异步函数语言可以直接帮忙创造出这种直观的分支,  它提供的是一个新的编程思想 .     




这种状态机模式, 一个函数内搞搞还可以, 多个函数嵌套就麻烦了. 函数与函数的嵌套需要大量的代码去维护相关的context(state).

如果你经常写状态机, 试想一下, 加入再也不用写那么多没意义的代码, 在任何函数的嵌套情况下都能随时停下来, 那是多好的一件事啊.


在深入思考, 和状态机做法不同的是,,

状态机需要手动去维护context(state), 多个状态机实际上是共享线程的stack的.

异步函数是自动维护context(state), 实现方式是每个任务都有自己单独的stack .

--

注释一下context其实是指state相关的数据 , 这个词应用太广泛了, 太容易引起误会.

-

论坛徽章:
0
12 [报告]
发表于 2012-03-20 17:38 |只看该作者
AsyncRead()这个函数是否就是主动释放CPU资源,允许scheduler来调度其他的thread来使用这个CPU资源?

论坛徽章:
0
13 [报告]
发表于 2012-03-21 10:36 |只看该作者
回复 12# cuibixiong_cu

类似. 但是不同

一般的RTOS式的schedule, 只是释放CPU资源.  就好像打斗地主一样, 只是一个pass的过程.
它没有定义当前任务是如何被唤醒的, 所以当前任务会随时唤醒.

而我的语言的设计里, 包含了唤醒机制.  
一旦放弃CPU的同时, 就代表任务被无限期挂起, 然后等到唤醒机制对那个任务重新激活.   

这相当于自带同步机制的schedule, 而同步代码, 是不需要程序员写的, 由语言直接提供.
写惯各种semaphore/mutex就会明白手写同步代码是多难调试的了..
由编程语言直接搞定这部分的话, 就可以让程序员更加专心去实现业务逻辑了.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP