>
請點擊輸入圖片描述
這感覺就是真他媽的舒服,怎么實現這么一個讓人很爽的東西呢,于是我們的主角---偉大的Generator函數登場了。
先理解這么自己悟的一句話:
"javascript是單線程的,順序執行一段代碼,執行到了異步操作,按正常的邏輯走的話就是主隊列中的代碼繼續執行,這時異步隊列中的代碼還未執行,我們繼續執行的代碼也就會發生報錯。那么解決問題的關鍵就是,我們能夠手動控制代碼的向下執行,配合一個東西監聽到異步操作的已經正常返回了之后,去手動的操作代碼的執行流程,這樣的話就實現了已同步的方式控制異步代碼的執行"
那么問題變成了解決兩個問題。
1、我們是如何實現對于異步操作是否成功返回的監聽。
2、如何手動操作代碼的向下執行。
對于第一個問題,我們采用的方案是使用promise對象的方式,Promise 的編程思想便是,用于“當xx數據準備完畢,then執行xx動作”這樣的場景,用在這里再適合不過。
對于第二個問題,我們便是采用偉大的generator生成器函數,其中的yield特性,可以使我們手動的控制代碼的向下執行。
接下來我們實際的解決一個問題:實現對于讀取文件異步操作的控制,當讀取完文件之后打印讀取的內容。
我們依賴于node環境,首先通過promise對其進行封裝,實現數據成功的監聽。我們手下代碼如下:
請點擊輸入圖片描述
var fs = require('fs');var readFile = function(fileName) { return new Promise(function(resolve,reject) {fs.readFile(fileName, function(err, data) { if (err) return reject(err);
resolve(data);
})
})
}
請點擊輸入圖片描述
有了這個東西,我們便可以通過其then()表達式,"當數據加載完后,執行某個動作"。那我們執行的動作是啥,自然就是執行下一步的代碼的操作。繼續看代碼:
請點擊輸入圖片描述
var gen = function* () { var f1 = yield readFile('/Users/dongqiang/Desktop/demo.txt'); var f2 = yield readFile('/Users/dongqiang/Desktop/demo.txt');買粉絲nsole.log('<<<<<<<<<<<<<<<<<<<<<<<',f1.toString());
買粉絲nsole.log('>>>>>>>>>>>>>>>>>>>>>>>>',f2.toString());
}
請點擊輸入圖片描述
這個就是一個generator函數的表達式,在這個函數里面,遇到generator就會執行類似于return的操作。我們通過next()便可以實現手動的控制代碼的向下執行。
那么我們如何控制代碼的執行流程呢,看下面一段:
請點擊輸入圖片描述
var g = gen();g.next().value.then(function(data){
g.next(data).value.then(function(data){
g.next(data);
});
});
請點擊輸入圖片描述
這段的具體解釋就是,我們通過promise封裝的對象實現了對于異步操作數據返回的監聽,當數據返回的時候,我們就通過next()執行下一步的操作,同時把上步操作的值帶入到下一個階段的執行流程之中。
但是上面這段操作很是蛋疼啊,我們要的是一個能通用的操作流程函數。那么我們繼續對這段循環操作進行封裝:
請點擊輸入圖片描述
function run(gen){ var g = gen(); function next(data){ var result = g.next(data); if (result.done) return result.value;result.value.then(function(data){
next(data);
});
}
next();
}
run(gen);
請點擊輸入圖片描述
于是一個非常簡單的買粉絲模塊便誕生了。
最終代碼如下:
請點擊輸入圖片描述
我們把函數放到run的執行器里面,便實現了同步操作異步代碼的過程
導讀:
生活中從一個活動轉為另一個活動,中間會留下一段空白地帶,如飯前飯后,排隊,等人,等車時間等,像這樣的時間我們稱之為碎片化時間。
眾所周知,幼兒階段的孩子注意力都難以長時間集中,每次能讓他們乖乖坐下來堅持學習30分鐘就已經很不錯了。但是,英語的學習短短的30分鐘肯定是不足夠的,都說幼兒學好英語的關鍵在于“少食多餐”,因此我們需要重視利用碎片化時間的,讓孩子進行短時學習,多次學習,這樣孩子的英語定能取得翻倍的進步。
現在,我們先來圍觀一下大地孩子在幼兒園是如何利用日常碎片化時間進行ABCmouse英語學習活動的。
為了讓孩子的英語學習效果更加顯著,大地校園每天除了有約30分鐘的ABCmouse美語集體學習活動之外,還充分利用了一日生活中的零碎時間,將ABCmouse的美語學習自然地融入到孩子的幼兒園生活當中,例如:
早餐時間段
一般是早餐前或者早餐后,老師在組織小朋友等餐時,就可以打開ABCmouse,讓孩子聽聽近期所學的ABCmouse英文歌曲,同時組織帶領孩子輕聲跟唱1-2遍,接下來就讓孩子帶著愉悅的心情用餐。
間點時間段
在每天喝牛奶的時間或者下午茶時間,老師挑選近期所學的ABCmouse圖書,帶領著孩子先跟著ABCmouse平臺朗讀幾遍,然后再喝牛奶或者用下午茶。
午餐時間段
固定在每天午餐前用5-10分鐘的時間,打開ABCmouse,結合單詞卡片,組織孩子進行小組單詞認讀游戲,強化記憶所學口語詞匯,累積單詞量。
午休時間段
一般孩子在用完午餐后不能立刻進行午睡,因為不利于消化。在這個空擋時間,老師就會給孩子安排一個溫馨的睡前小故事,結合ABCmouse里面所學的有趣的字母故事或者圖書故事,讓孩子仔細聽,這樣不僅鍛煉孩子的聽力,也鞏固了學習。
離園時間段
下午離園時間,組織孩子利用教室或者電腦教室的電腦,二、三人一起輪流進行ABCmouse上機秀活動,孩子們可以與小伙伴們一起相互交流,自由探索,從而能促進孩子的學習積極性。
目前,ABCmouse在電腦、手機、平板都能登錄使用,是一款非常便捷的幼兒美語學習軟件。孩子無論是在幼兒園,在家里,還是在戶外都可以隨時登錄學習。那么,家長平時應該怎樣有效利用碎片化時間讓孩子學習ABCmouse呢?以下列舉幾點小建議:
1、在早上起床洗漱時間,播放ABCmouse平臺的歌曲或圖書,讓娃多磨耳朵,有助于提升聽力,培養孩子英語語感。
2、利用早上開車送娃上幼兒園的時間,讓孩子仔細聽并跟讀一本圖書故事。
3、在帶娃遇到排長隊的時間,打開ABCmouse,帶著孩子過一遍某個字母或者詞匯家族的單詞,加深記憶。
4、在帶娃等車等人的時間,打開ABCmouse,帶著孩子一起玩個英文小游戲或者完成一幅拼圖游戲也是不錯的選擇。
5、在用完晚餐后打開ABCmouse,喂喂ABCmouse的小寵物、裝扮一下我的房間,這是多么溫馨的親子時光。
6、在晚上睡覺前,播放ABCmouse詩歌、圖書、故事,讓娃聽著ABCmouse原汁原味的美語進入甜美的夢鄉。
當然!以上分享的小經驗只是對于零碎時間上的利用,若要修煉成英語小學霸,每天仍舊需要有整塊的30分鐘的學習哦。加油!
*部分圖片及內容來自網絡,版權為原作者所有,如有侵犯權益,請聯系我們刪除!
買粉絲買粉絲: Spark大數據
一、Zookeeper介紹
ZooKeeper是一種為分布式應用所設計的高可用、高性能且一致的開源協調服務,它提供了一項基本服務: 分布式鎖服務 。
分布式應用可以基于它實現更高級的服務,實現諸如同步服務、配置維護和集群管理或者命名的服務。Zookeeper服務自身組成一個集群,2n+1個(奇數)服務允許n個失效,集群內一半以上機器可用,Zookeeper就可用。
假設 3臺機器組成的集群,可以有允許一臺失效,如果有2臺失效,這個集群就不可用,1<1.5,一般的搭建zookeeper集群時,以奇數臺機器來搭建。目的:是為了提高容錯能允許多損失一臺。
1.1 數據模型
1)ZooKeeper本質上是一個 分布式的小文件存儲系統 ;
2)Zookeeper表現為一個分層的文件系統目錄樹結構(不同于文件系統的是,節點可以有自己的數據,而文件系統中的目錄節點只有子節點), 每個節點可以存少量的數據(1M左右) 。
3)每個節點稱做一個ZNode。 每個ZNode都可以通過其路徑唯一標識 。
4)ZooKeeper中的 每個節點存儲的