吳俊杰
程序語言的循環時間是一個程序語言的基本參數,直接影響了程序的執行速度。2013年9月Scratch語言開發團隊公布了Scratch2.0的PC版本,與之前的Scratch2.1相比,循環速度有了很大的提升。本文將通過實驗比較兩個版本的循環時間上的差異。
● 問題的提出
在Scratch1.4中,如果需要開發一個秒表,可使用如圖1所示的程序。
我們發現秒表并不像預想的那樣,結束程序之后,小貓會說10,而是多出了0.34的誤差,這一誤差產生的原因是程序完成一個循環需要時間,這個時間在Scratch1.4之下是多少,我們嘗試通過實驗進行研究。
● Scratch1.4之下的循環時間測定
為了獲取數據,在變量菜單中新建一個鏈表“時間”,并修改程序,將每次循環結束后的時間存儲在鏈表中(如圖2)。
將鏈表輸出為TXT文件在Excel進行分析,首先可以通過差值的方法進行分析(如圖3)。
此外,我們還可以通過Excel繪制差值結果的圖像,并通過擬合直線的方法來分析循環時間的平均值(如圖4)。
研究說明,每次循環大約需要0.033秒,并且循環執行的過程中循環時間基本穩定。但是循環內部“等待1秒”和“將計時器加入鏈表”可能也需要占用一定的時間,因此我們修改了研究工具(如圖5)。
實驗發現,Scratch1.4的循環時間是0.0252秒,并且是一個穩定的數據,實驗原始數據見下表。
Scratch1.4的循環時間測定
循環次數 時間/秒 差值/秒
100 2.51 2.51
200 5.039 2.529
300 7.554 2.515
400 10.125 2.571
500 12.586 2.461
600 15.098 2.512
700 17.613 2.515
800 20.12 2.507
900 22.655 2.535
1000 25.153 2.498
平均值 2.5153
我們發現,由于Scratch1.4的循環時間是一個穩定值,因此我們只需要用1000次循環的時間除以1000就可以比較準確地測定這個數。這個數據看似比較小,但是在計算機看來已經是一個非常慢的循環速度了,意味著計算機在每秒只能完成40個循環,在Scratch1.4中,提供了超速模式,這種模式使得程序的循環時間大大加快,超速模式的速度是普通模式下的五十分之一(如圖6)。
可以看出在超速模式下,執行1000次循環的時間是一般模式下的500倍。
● Scratch2.0下的循環時間測定
在Scratch2.0中使用類似的方法,測定Scratch2.0的循環時間,我們發現100萬次循環的時間為0.82秒,每次循環的時間為8.2×10-7秒,循環時間是Scratch1.4的三萬分之一,是Scratch1.4下超速模式的六百分之一(如圖7)。
實驗發現,在Scratch2.0中的加速模式下循環時間沒有變化,加速模式的原理還需要進一步的研究。
● 進一步需要研究的問題
本研究指出了Scratch2.0相對于Scratch1.4的一個不常被發現但是非常重要的改進:循環時間的變化,這種變化使得Scratch能夠完成一些復雜的程序和科學計算得以實現(如圖8)。
圖8所示通過100萬次計算,經過5.38秒,將圓周率的計算精確到小數點后第六位,這個程序在Scratch1.4中至少需要7個小時的時間。此外,從計算π的案例出發,我們還可以搜索其他的計算π的算法,并且比較這些算法在效率上的優劣,當然,效率越高,計算速度就會越快。