lab2中,agent控制着发送数据的数量,而数据的内容由generator控制;到了lab3,数据的数量和内容都由generator控制
lab2里initiator没有自己的run任务,它的调用发生在agent里,会被重复调用ntrans次。而在lab3里initiator有自己的run任务,并且用上了forever,就像一个吃的停不下来的胖子,发现generator产生一个数据,就会往接口发送一个数据,永远运行。
将Lab3中的chnl_initiator和chnl_generator与Lab2中的作对比,可以看出发送数据的逻辑发生了很大的改变。Lab2是generator通过get_trans()获得一个句柄,然后立马返回给initiator的chnl_write(),而在Lab3中,generator产生了一个对象,并把句柄写入到req_mb这个信箱中,然后initiator会拿到这个句柄,并把它消化掉,消化掉以后会重新克隆一个一模一样的对象,发送之前会把变量rsp置为1,表示已经响应,然后把这个已响应的对象放到rsp_mb信箱中,generator就可以通过变量rsp来判断initiator是否已经消化掉了这个数据。
chnl_agent类,将generator拿到了test,这样可以通过do_config()事先对generator进行随机化,generator调用自己的run(),通过调用send_trans()来随机化chnl_trans,进而控制产生多少个数据,产生什么样的数据,然后通过信箱将数据发送给initiator,initiator拿到随机化的数据,通过接口进行激励。chnl_agent
类里面只剩下了initiator