爲了說明某種狀況, 我先寫一段僞代碼模擬從Torrent到下載MP4,而後建立窗口再到播放的過程!node
請注意數據庫
//----節點node0 //----這是進程0(或者微函數0,如下的進程和微函數請自行區別)(pid0)---- //微函數是有參數和返回值的,這裏的(*)匹配任何類型,我省略了微函數返回值的聲明 TINY((*) argv)("/process/pid0")//這是微函數的聲明,這裏直接將它安裝到系統的/process/pid0 目錄下, { Torrent test = new Torrent("data1/test.torrent");// //或者能夠這樣 : Torrent test = System.fs.get<Torrent>("test.torrent") String name = test.getName(); String infoHash = test.infoHash().toHexStr();//假設這個種子的InfoHash爲:FF //這在標準輸出中寫入:InfoHash is :FF! System.out.println("InfoHash is :${infoHash}!");//這裏借用Dart形式的帶變量字符串(${infoHash})來渲染一種智能的氣氛!! if(!"abc.mp4".equals(name)){ test.setNmae("abc.mp4",FLUSH);//修改種子的名稱,而後直接(算是手動觸發)同步到存儲器!.至於底層如何同步暫時忽略 } MP4 mp4 = (MP4)test.download2("/data/test.mp4");// 同步下載文件(固然也可使用異步的寫法), //保存到目錄/data下(簡單的強制類型轉換看做是自動的解碼把) Window win = System.gui.createWindow("Window Title!");//在系統中建立一個窗口,固然窗口也可使持久化的數據結構 EventBus hub = mp4.play(win);//將下載以後的視頻扔到窗口播放! hub.onEnd([](){ win.close();//播放完畢,自動關閉窗口 }); Process current = System.process.getCurrent();//得到當前進程其路徑爲:/process/pid0 current.addData("key",mp4.getMeta("a"));//將MP4的Meta跟pid0關聯,由於我以爲構建結構化的查詢過程比較複雜,在此只用KV數據庫的方式將數據與進程關聯 current.funsh()//將數據刷到System中 //--這是另一種形式 //System.send("pid1",mp4); //把mp4發送到進程爲pid的外部進程,結構化的進程之間通訊 //System.send("pid1",mp4) //這裏的進程不單單是一個動態的"任務",也是文件系統之上的一個結構(他是持久化的) //直接得到進程1,用路徑的形式讓他看起來像是從文件系統中獲得的(若是文件系統中的進程不存在,則自動建立一個) Process p1 = System.process.get("/process/pid1",true); System.send(p1,mp4)//將"結構化的MP4"發送到進程1, //而後退出或者循環等待!若是是微函數退出,則發送過程就交給操做系統來管理!若是阻塞,提供超時!具體底層實現不解釋! }//END OF TINY //----節點node0 //----同一系統上的另一個進程:id爲pid1---- TINY("/process/pid0") { System.process.get("/process/pid1");//得到pid0保存在process的進程 System.onReceiveData([](Process sender,MP4 data){//這是進程1,接受進程0的數據 if(sender.name == "pid0") { Window win = System.gui.createWindow("Window 2");//在系統中建立一個窗口 win.show(data);//而後播放 } }); } //----不一樣節點(node1)上的另一個進程(pid2)---- TINY("/process/pid2"){ MP4 m = System.network.get("node0:/data/test.mp4");//這個過程是瞬時 Meta metaFromMP4 = m.getMeta("a");//從mp4中得到meta信息 Process ppp = System.process.get("node0:/process/pid1",false);//從節點0得到關聯進程 Meta metaFromProcess = (Meta)ppp.getData("a");//從節點0進程1關聯的數據庫中得到meta信息! if(metaFromProcess != metaFromMP4){ //... ERROR } } //----這是調用代碼---tiny函數能夠任意組合,這種每一種組合能夠表示爲一個任務!! Tiny tiny = System.getTiny("node0:/process/pid0") EventBus busPid0 = tiny.getEventBus();//這裏返回一個事件插座! busPid0.onExit(....);//監聽pid0是否結束運行 tiny.run(1,ANYTIME);//將Tiny加入運行Schedule,這裏的1表示只運行一次, //ANYTIME表示系統能夠調度在任什麼時候間運行(看操做系統心情),說明時間對函數的影響將不考慮! //固然也能夠設置優先級,或者讓他當即執行或者安排在哪一個函數以前或者以後??? System.run("node0:/process/pid1");//同步,當即運行 System.run("node1:/process/pid2");// System.exit();//退出系統,繼續...Reloop! //Process.onExit(....);//
這個系統的簡單說明"數據結構