cyt

以前一直都是做同步方式的数据结构存储。即典型的:
void  TMyClass::onSave(TStorage & s)
{
    s << member1;
    s << member2;
      ......
}

void  TMyClass::onLoad(TStorage & s)
{
    s >> member1;
    s >> member2;
      ......
}
假如s满了(Save的时候)或者s数据不足(Load的时候),函数会等待,直到s可用或者出错退出。相当于进程的Stack帮我们保存了I/O状态的上下文。

但是现在要转到异步方式I/O,当s“不可用”的时候,线程应该中断当前的操作,把I/O状态的上下文保存下来,转而做其他的操作。
所以麻烦就来了,要自己做这个上下文的保存。一般来说要记录以下的内容:

1、操作到哪一个成员。
2、假如成员是一个普通的类型、那就要记录操作到类型的哪一个byte。
2、如果成员是一个复合类型,同样,递归地回到了1。

因此,上下文保存的结果一般都是一个自己做的stack,里面就是记录这个递归的过程。

其实想想,何苦为了省那几十k的空间折磨自己呢,例如输出,先用同步的方式把数据记录在内存,然后就记录内存的起始地址和长度,异步处理的时候就把内存输出,如果没有输出完的,就记下未输出部分的起始地址和长度,等待下一次。
不过当结果比较庞大的时候,还是需要自己慢慢苦干,真是悲惨……

posted on 2005-10-08 14:44 cyt 阅读(460) 评论(0)  编辑 收藏 引用 所属分类: Work

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理