基本介紹
- 中文名:最大公約數
- 外文名:greatest common divisor
- 類型:應用程式
- 出現時間:公元前300年
基本介紹,全稱,設計,功能,相關代碼,實例,公約數,組織縮寫,指導思想,政策宣示,信仰限制,中央機構,最高領導人,歷屆會議,入黨誓詞,技能縮寫,職稱縮寫,定義,
基本介紹
全稱
GCD為Grand Central Dispatch的縮寫。
Grand Central Dispatch (GCD)是Apple開發的一個多核編程的較新的解決方法。它主要用於最佳化應用程式以支持多核處理器以及其他對稱多處理系統。它是一個線上程池模式的基礎上執行的並行任務。在Mac OS X 10.6雪豹中首次推出,也可在IOS 4及以上版本使用。
設計
GCD是一個替代諸如NSThread等技術的很高效和強大的技術。GCD完全可以處理諸如數據鎖定和資源泄漏等複雜的異步編程問題。GCD的工作原理是讓一個程式,根據可用的處理資源,安排他們在任何可用的處理器核心上平行排隊執行特定的任務。這個任務可以是一個功能或者一個程式段。
GCD仍然在一個很低的水平使用執行緒,但是它不需要程式設計師關注太多的細節。GCD創建的佇列是輕量級的,蘋果聲明一個GCD的工作單元需要由15個指令組成。也就是說創造一個傳統的執行緒很容易的就會需要幾百條指令。
GCD中的一個任務可被用於創造一個被放置於佇列的工作項目或者事件源。如果一個任務被分配到一個事件源,那么一個由功能或者程式塊組成的工作單元會被放置於一個適當的佇列中。蘋果公司認為GCD相比於普通的一個接一個的執行任務的方式更為有效率。
功能
這個調度框架聲明了幾種數據類型和函式來創建和操作他們:
一、調度佇列
所有的調度佇列都是先進先出佇列,因此,佇列中的任務的開始的順序和添加到佇列中的順序相同。GCD自動的為我們提供了一些調度佇列,我們也可以創建新的用於具體的目的。
下面列出幾種可用的調度佇列類型以及如何使用。
二、調度資源
它是一個監視某些類型事件的對象。當這些事件發生時,它自動將一個block放入一個調度佇列的執行例程中。
三、調度組
允許將多任務分組來方便後來加入執行。任務能作為一個組中的一個成員被加到佇列中,客戶端能用這個組對象來等待直到這個組中的所有任務完成。
四、調度信號量
允許客戶端並行發布一定數量的任務。
相關代碼
在開始之前,需要理解是要提供給GCD佇列的是代碼塊,用於在系統或者用戶創建的的佇列上調度運行。
1.聲明一個佇列
如下會返回一個用戶創建的佇列:
dispatch_queue_t myQueue = dispatch_queue_create("com.iphonedevblog.post", NULL);
其中,第一個參數是標識佇列的,第二個參數是用來定義佇列的參數(目前不支持,因此傳入NULL)。
2.執行一個佇列
如下會異步執行傳入的代碼:
dispatch_async(myQueue, ^{ [self doSomething]; });
其中,首先傳入之前創建的佇列,然後提供由佇列運行的代碼塊。
3.聲明並執行一個佇列
如果不需要保留要運行的佇列的引用,可以通過如下代碼實現之前的功能:
dispatch_async(dispatch_queue_create ("com.iphonedevblog.post", NULL), ^{ [self doSomething]; } );
暫停一個佇列
如果需要暫停一個佇列,可以調用如下代碼。暫停一個佇列會阻止和該佇列相關的所有代碼運行。
dispatch_suspend(myQueue);//恢復一個佇列
如果暫停一個佇列不要忘記恢復。暫停和恢復的操作和記憶體管理中的retain和release類似。調用dispatch_suspend會增加暫停計數,而dispatch_resume則會減少。佇列只有在暫停計數變成零的情況下才開始運行。
dispatch_resume(myQueue);
4.從佇列中在主執行緒運行代碼
有些操作無法在異步佇列運行,因此必須在主執行緒(每個套用都有一個)上運行。UI繪圖以及任何對NSNotificationCenter的調用必須在主執行緒長進行。在另一個佇列中訪問主執行緒並運行代碼的示例如下:
/*dispatch_sync(dispatch_get_main_queue(), ^{ [self dismissLoginWindow]; });*/在主執行緒中使用會造成死鎖,慎用!
注意,dispatch_suspend (以及dispatch_resume)在主執行緒上不起作用。
實例
可以在John Siracusa的ArsTechnica部落格文章Snow Leopard review中找到兩個演示如何使用Grand Central Dispatch的例子。首先,一個處理文檔的應用程式有一個名為analyzeDocument函式,會做一些統計文檔的單詞和段落的事情。通常情況下,這將是一個快速的過程,並在用戶根本沒注意到按下一個鍵和結果顯示出來之間的延遲就已經在主執行緒中執行好了。
-(IBAction)analyzeDocument:(NSButton*)sender{ NSDictionary*stats=[myDoc analyze]; [myModel setDict:stats]; [myStatsViewsetNeedsDisplay:YES]; [stats release];}
如果一個文檔太大並且需要很長的時間去執行,那么主執行緒將會暫停等待這個函式完成。如果花了很長的時間,那么用戶就會注意到這個延遲,應用程式甚至會沒有回響。這個問題的解決方案如下:
-(IBAction)analyzeDocument:(NSButton*)sender{ dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),^{ NSDictionary*stats=[myDoc analyze]; dispatch_async(dispatch_get_main_queue(),^{ [myModel setDict:stats]; [myStatsView setNeedsDisplay:YES]; [stats release];}); });};
在這裡,[myDoc analyze]的調用先被放置在了一個塊中,然後進入一個全局並發佇列里。在完成[myDoc analyze]的運行之後,一個新的塊放置在主佇列里(應用程式主執行緒在上面運行),更新了GUI(這是必要的,因為GUI只能由主執行緒更新)。通過這兩個小的改動,開發人員就避免了能被用戶看到的潛在的暫停並且使得應用程式更好的利用硬體資源。
第二個例子是一個並行的for循環:
for(i=0;i<count;i++){ results[i]=do_work(data,i);}total=summarize(results,count);
這段代碼調用的do_work函式統計次數,將第i次的結果賦值給數組的第i個元素,然後在循環結束之後調用summarize函式。這些操作時順序執行的,實際上並不需要這樣。假設do_work函式不需要其他函式調用的結果,那么這些調用就可以同時運行了。這就是在GCD中的做法:
dispatch_apply(count,dispatch_get_global_queue(0,0),^(size_ti){ results[i]=do_work(data,i);});total=summarize(results,count);
這裡,dispatch_apply運行傳遞來的塊,在全局佇列中放入每一次調用,並且給每次塊調用一個從0到n-1的不同的數字。這樣就允許作業系統通過當前的硬體和系統負載選擇最佳的執行緒數來分配合適的工作。dispatch_apply知道所有的在給定佇列的塊運行完成才返回,這樣就可以保證在調用summarize之前完成原來的循環里的所有事情。
程式設計師可以創建自己的任務佇列,他們必須串列執行,但可在一個單獨的執行緒中執行。一個新的佇列可以像這樣被創建:
dispatch_queue_t exampleQueue;exampleQueue=dispatch_queue_create("com.example.unique.identifier",NULL);//exampleQueue may be used here.dispatch_release(exampleQueue);
必須小心,避免在佇列中分配的塊同步的放在同一佇列的另一個塊中,這是保證不會發生死鎖情況。這樣的代碼可能會做下面的事情:
dispatch_queue_t exampleQueue=dispatch_queue_create("com.example.unique.identifier",NULL);dispatch_sync(exampleQueue,^{ dispatch_sync(exampleQueue,^{ printf("I am now deadlocked...\n"); });});dispatch_release(exampleQueue);
公約數
起源
早在公元前300年左右,歐幾里得就在他的著作《幾何原本》中給出了高效的解法——輾轉相除法。輾轉相除法使用到的原理很聰明也很簡單,假設用f(x, y)表示x,y的最大公約數,取k = x/y,b = x%y,則x = ky + b,如果一個數能夠同時整除x和y,則必能同時整除b和y;而能夠同時整除b和y的數也必能同時整除x和y,即x和y的公約數與b和y的公約數是相同的,其最大公約數也是相同的,則有f(x, y)= f(y, x % y)(y > 0),如此便可把原問題轉化為求兩個更小數的最大公約數,直到其中一個數為0,剩下的另外一個數就是兩者最大的公約數。
特點及意義
最大公約數指某幾個整數共有因子中最大的一個。
GCD即Greatest Common Divisor.
例如,12和30的公約數有:1、2、3、6,其中6就是12和30的最大公約數。
兩個整數的最大公約數主要有兩種尋找方法:
* 兩數各分解質因子,然後取出同樣有的項乘起來
* 輾轉相除法(擴展版)
和最低公倍數(lcm)的關係:gcd(a, b)×lcm(a, b) = ab
兩個整數的最大公因子可用於計算兩數的最低公倍數,或分數化簡成最簡分數。
兩個整數的最大公因子和最低公倍數中存在分配律:
* gcd(a, lcm(b, c)) = lcm(gcd(a, b), gcd(a, c))
* lcm(a, gcd(b, c)) = gcd(lcm(a, b), lcm(a, c))
在坐標里,將點(0, 0)和(a, b)連起來,通過整數坐標的點的數目(除了(0, 0)一點之外)就是gcd(a, b)。
gcd遞歸定理及證明
gcd遞歸定理是指gcd(a,b)=gcd(b,a%b),其中%表示取餘數。
證明如下:
我們只需證明gcd(a,b)和gcd(b,a%b)可以互相整除即可。
對於gcd(a,b),它是a和b的線性組合中的最小正元素,gcd(b,a%b) 是b與a%b的一個線性組合,而a%b是a與b的一個線性組合,因而gcd(b,a%b)是一個a與b的線性組合,因為a,b都能被gcd(a,b)整除,因而任何一個a與b的線性組合都能被gcd(a,b)整除,所以gcd(b,a%b)能被gcd(a,b)整除。反之亦然。
C語言編程實現
#include<stdio.h>//non-recursionunsigned int gcd(unsigned int a,unsigned int b){ int r; while(b>0) { r=a%b; a=b; b=r; } return a;}unsigned int gcd(unsigned int a,unsigned int b){ while(b^=a^=b^=a%=b); return a;}unsigned int gcd(unsigned int a,unsigned int b){ return (b>0)?gcd(b,a%b):a;}
組織縮寫
共產黨的拼音縮寫GCD,中國共產黨,簡稱中共,成立於1921年7月,1949年(民國38年)10月至今為代表工人階級領導工農聯盟和統一戰線,在中國大陸實行人民民主專政的中華人民共和國唯一執政黨,因此在中國大陸地區又經常簡稱“黨”。
指導思想
中國共產黨的指導思想,是指導中國共產黨全部活動的理論體系,是中國共產黨的思想建設、組織建設和作風建設的理論基礎。《中國共產黨章程》明確規定:“中國共產黨以馬克思列寧主義、毛澤東思想、鄧小平理論和“三個代表”重要思想作為自己的行動指南。”
根據中國共產黨的歷次代表大會對《中國共產黨章程》的修改,中國共產黨指導思想的演變可以劃分為以下幾個階段。
- 七大到八大,指導思想是馬克思列寧主義、毛澤東思想;
- 八大到九大,指導思想是馬克思列寧主義;
- 九大到十四大,指導思想是馬克思列寧主義、毛澤東思想;
- 十四大到十六大,指導思想是馬克思列寧主義、毛澤東思想、鄧小平理論;(十四大黨章)
- 十六大至十七大,指導思想是馬克思列寧主義、毛澤東思想、鄧小平理論和“三個代表”重要思想;(十六大黨章)
- 十七大於2007年10月21日通過《中國共產黨章程(修正案)》,將科學發展觀新增入黨章(未作為指導思想)
- 十八大於2012年11月14日通過了《中國共產黨章程(修正案)》,把科學發展觀與馬克思列寧主義、毛澤東思想、鄧小平理論、“三個代表”重要思想一道確立為黨的指導思想。
- 十九大至今,指導思想是馬克思列寧主義、毛澤東思想、鄧小平理論、“三個代表”重要思想、科學發展觀和習近平新時代中國特色社會主義思想。
政策宣示
- 堅持黨的指導思想和基本路線。
- 堅持解放思想,實事求是,與時俱進。
- 堅持全心全意為人民服務。
- 堅持民主集中制。
- 堅持黨管幹部原則
- 堅持以經濟建設為中心。
- 堅持四項基本原則。
- 堅持改革開放。
- 堅持和平共處五項原則。
- 堅持黨領導人民解放軍等其他力量。
- 黨的領導主要是政治,思想和組織的領導。
信仰限制
中國共產黨宣稱加入中國共產黨的個人須放棄宗教信仰,若是擁有宗教信仰,包括基督教,天主教,伊斯蘭教,猶太教等,需退出上幾種宗教才可“入黨”,其規定受宗教影響或具有濃厚宗教情感的人不能加入中國共產黨,而有宗教信仰的青年學生不能申請入黨。中共黨員必須是一個“無神論”者。
中央機構
- 中央委員會組織系統(領導機構)
- 中共中央書記處(是中共中央政治局及其常委會的辦事機構,成員簡稱“中央書記處書記”)
- 中央政治局、中央政治局常委會在中央委員會全體會議閉會期間行使其職權
- 中國共產黨中央委員會總書記(簡稱“中共中央總書記”,中共中央主要負責人)
- 中國共產黨中央政治局(簡稱“中共中央政治局”或“中央政治局”;成員簡稱“中央政治局委員”,候補成員簡稱“中央政治局候補委員”)
- 中國共產黨中央政治局常務委員會(簡稱“中共中央政治局常委會”或“中央政治局常委會”,成員簡稱“中央政治局常委”)
- 中國共產黨中央軍事委員會(簡稱“中共中央軍委”,與中華人民共和國中央軍事委員會是“一個機構、兩塊牌子”。)
- 中國共產黨中央紀律檢查委員會(簡稱“中紀委”)
最高領導人
歷屆會議
會議 | 地點 | 時間 | 代表人數 | 黨員總數 |
---|---|---|---|---|
上海、嘉興 | 1921年7月23日至7月30日以及8月2日 | 13 | 57 | |
上海 | 1922年7月16日至23日 | 12 | 195 | |
廣州 | 1923年6月12日至20日 | 30餘 | 420 | |
上海 | 1925年1月11日至22日 | 20 | 994 | |
武漢 | 1927年4月27日至5月9日 | 82 | 57967 | |
莫斯科 | 1928年6月18日至7月11日 | 34 | 13萬 | |
中共六屆一中全會 | 莫斯科 | 1928年7月19日 | ||
中共六屆二中全會 | 上海 | 1929年6月25日至30日 | ||
中共六屆三中全會 | 上海 | 1930年9月24日至28日 | ||
中共六屆四中全會 | 上海 | 1931年1月7日 | ||
中共六屆五中全會 | 1934年1月15日至18日 | |||
延安 | 1937年5月2日至14日 | |||
中共六屆六中全會 | 延安 | 1938年9月29日至11月6日 | ||
中共六屆七中全會 | 延安 | 1944年5月21日至1945年4月20日 | ||
延安 | 1945年4月23日至6月11日 | 755 | 121萬 | |
中共七屆一中全會 | 延安 | 1945年6月19日 | ||
中共七屆二中全會 | 1949年3月5日至13日 | |||
中共七屆三中全會 | 北京 | 1950年6月6日至9日 | ||
中共七屆四中全會 | 北京 | 1954年2月6日至10日 | ||
中國共產黨全國代表會議 | 北京 | 1955年3月21日至31日 | ||
北京 | 1956年9月15日至27日 | 1026 | 1073萬 | |
中共八屆一中全會 | 北京 | 1956年9月28日 | ||
中共八屆二中全會 | 北京 | 1956年11月10日至15日 | ||
中共八屆三中全會 | 北京 | 1957年9月20日至10月9日 | ||
中共八屆四中全會 | 北京 | 1958年5月3日 | ||
中共八屆五中全會 | 北京 | 1958年5月25日 | ||
中共八屆六中全會 | 武昌 | 1958年11月28日至12月10日 | ||
中共八屆七中全會 | 上海 | 1959年4月2日至5日 | ||
中共八屆八中全會 | 廬山 | 1959年8月2日至16日 | ||
中共八屆九中全會 | 北京 | 1961年1月14日至18日 | ||
中共八屆十中全會 | 北京 | 1962年9月24日至27日 | ||
中共八屆十一中全會 | 北京 | 1966年8月1日至12日 | ||
中共八屆十二中全會 | 北京 | 1968年10月13日至31日 | ||
北京 | 1969年4月1日至24日 | 1512 | 2200萬 | |
中共九屆一中全會 | 北京 | 1969年4月28日 | ||
中共九屆二中全會 | 廬山 | 1970年8月23日至9月6日 | ||
北京 | 1973年8月24日至28日 | 1249 | 2800萬 | |
中共十屆一中全會 | 北京 | 1973年8月30日 | ||
中共十屆二中全會 | 北京 | 1975年1月8日至10日 | ||
中共十屆三中全會 | 北京 | 1977年7月16日至21日 | ||
北京 | 1977年8月12日至18日 | 1510 | 3500萬 | |
中共十一屆一中全會 | 北京 | 1977年8月19日 | ||
中共十一屆二中全會 | 北京 | 1978年2月18日至23日 | ||
中共十一屆三中全會 | 北京 | 1978年12月18日至22日 | ||
中共十一屆四中全會 | 北京 | 1979年9月25日至28日 | ||
中共十一屆五中全會 | 北京 | 1980年2月23日至29日 | ||
中共十一屆六中全會 | 北京 | 1981年6月27日至29日 | ||
中共十一屆七中全會 | 北京 | 1982年8月6日 | ||
北京 | 1982年9月1日至11日 | 1545 | 3965萬 | |
中共十二屆一中全會 | 北京 | 1982年9月12日至13日 | ||
中共十二屆二中全會 | 北京 | 1983年10月11日至12日 | ||
中共十二屆三中全會 | 北京 | 1984年10月20日 | ||
中共十二屆四中全會 | 北京 | 1985年9月16日 | ||
中國共產黨全國代表會議 | 北京 | 1985年9月18日至23日 | ||
中共十二屆五中全會 | 北京 | 1985年9月24日 | ||
中共十二屆六中全會 | 北京 | 1986年9月28日 | ||
中共十二屆七中全會 | 北京 | 1987年10月20日 | ||
北京 | 1987年10月25日至11月1日 | 1936 | 4600萬 | |
中共十三屆一中全會 | 北京 | 1987年11月2日 | ||
中共十三屆二中全會 | 北京 | 1988年3月15日至19日 | ||
中共十三屆三中全會 | 北京 | 1988年9月26日至30日 | ||
中共十三屆四中全會 | 北京 | 1989年6月23日至24日 | ||
中共十三屆五中全會 | 北京 | 1989年11月6日至9日 | ||
中共十三屆六中全會 | 北京 | 1990年3月9日至12日 | ||
中共十三屆七中全會 | 北京 | 1990年12月25日至30日 | ||
中共十三屆八中全會 | 北京 | 1991年11月25日至29日 | ||
中共十三屆九中全會 | 北京 | 1992年10月5日至9日 | ||
北京 | 1992年10月12日至18日 | 1989 | 5100萬 | |
中共十四屆一中全會 | 北京 | 1992年10月19日 | ||
中共十四屆二中全會 | 北京 | 1993年3月5日至7日 | ||
中共十四屆三中全會 | 北京 | 1993年11月11日至14日 | ||
中共十四屆四中全會 | 北京 | 1994年9月25日至28日 | ||
中共十四屆五中全會 | 北京 | 1995年9月25日至28日 | ||
中共十四屆六中全會 | 北京 | 1996年10月7日至10日 | ||
中共十四屆七中全會 | 北京 | 1997年9月6日至9日 | ||
北京 | 1997年9月12日至18日 | 2074 | 5900萬 | |
中共十五屆一中全會 | 北京 | 1997年9月19日 | ||
中共十五屆二中全會 | 北京 | 1998年2月25日至26日 | ||
中共十五屆三中全會 | 北京 | 1998年10月12日至14日 | ||
中共十五屆四中全會 | 北京 | 1999年9月19日至22日 | ||
中共十五屆五中全會 | 北京 | 2000年10月9日至11日 | ||
中共十五屆六中全會 | 北京 | 2001年9月24日至26日 | ||
中共十五屆七中全會 | 北京 | 2002年11月3日至5日 | ||
北京 | 2002年11月8日至14日 | 2114 | 6600萬 | |
中共十六屆一中全會 | 北京 | 2002年11月15日 | ||
中共十六屆二中全會 | 北京 | 2003年2月24日至26日 | ||
中共十六屆三中全會 | 北京 | 2003年10月11日至14日 | ||
中共十六屆四中全會 | 北京 | 2004年9月16日至9月19日 | ||
中共十六屆五中全會 | 北京 | 2005年10月8日至11日 | ||
中共十六屆六中全會 | 北京 | 2006年10月8日至11日 | ||
中共十六屆七中全會 | 北京 | 2007年10月9日至12日 | ||
北京 | 2007年10月15日至21日 | 2213 | 7336.3萬 | |
中共十七屆一中全會 | 北京 | 2007年10月22日 | ||
中共十七屆二中全會 | 北京 | 2008年2月25日至27日 | ||
中共十七屆三中全會 | 北京 | 2008年10月9日至12日 | ||
中共十七屆四中全會 | 北京 | 2009年9月15日至18日 | ||
中共十七屆五中全會 | 北京 | 2010年10月15日至18日 | ||
中共十七屆六中全會 | 北京 | 2011年10月15日至18日 | ||
北京 | 2012年11月8日至14日 | 2270 | 8260.2萬 |
入黨誓詞
我志願加入中國共產黨,擁護黨的綱領,遵守黨的章程,履行黨員義務,執行黨的決定,嚴守黨的紀律,保守黨的秘密,對黨忠誠,積極工作,為共產主義奮鬥終身,隨時準備為黨和人民犧牲一切,永不叛黨。
技能縮寫
《魔獸世界》中global cool down 的縮寫,即技能公共冷卻時間。
職稱縮寫
廣告公司中 為Group Creative Director的縮寫 即創意群總監
定義
Grand Central Dispatch (GCD)是Object-C中解決多執行緒編程的一種方案,在iOS4中推出。在應對多核cpu時效率更高。