#
http://blog.sina.com.cn/sftk
【CSDN編者按】
上述圖書中,第一級對應的英文為Unleashed series, 21 days series, 24 hour series, dummies series...其實也有很多不錯的書,Unleashed即圖靈所出揭秘系列,好書不少;即使是21天、24小時、dummies系列,從入門來說也基本上都算好書。大家在選書時,首先對國內原創的大套書要特別持謹慎態度,越大型的叢書越要小心,因為沒有人對這樣浩大的工程真正負責。而國外的書原著總體上水平都有較好的保證,主要看譯者是否負責。
圖書第二級中《別讓我思考》對應英文為《Don't Make me Think》,中文版名字應該是《點石成金》。
圖書第三級中《代碼珠璣》,中文版名應為《編程珠璣》(兩卷:卷1鏈接,卷2鏈接)。
原文出處:
http://www.indiangeek.net/wp-content/uploads/Programmer%20competency%20matrix.htm
譯文出處:
http://static.icybear.net/%5BCN%5DProgrammer%20competency%20matrix.htm
事件
事件是用來同步地位不相等的線程的,事件可以用來使一個線程完成一件事情,然后另外的線程完成剩下的事情。事件的使用很靈活,自動事件的激發態是由人工來控制的,而Mutex在釋放(releaseMetux)后就一直處于激發態,直到線程WaitForSingleObject。事件可以用來控制經典的讀寫模型和生產者和消費者模型。相應的方式為,生成者等待消費者的消費,再消費者消費完后通知生產者進行生產。
Mutex
Mutex是排他的占有資源,一般用于地位相等的現在進行同步,每個線程都可以排他的訪問一個資源或代碼段,不存在哪個線程對資源訪問存在優先次序。一個線程只能在Mutex處于激發態的時候訪問被保護的資源或代碼段,線程可以通過WaitForSingelObject來等待Mutex,在訪問資源完成之后,ReleaseMutex釋放Mutex,此時Mutex處于激發態。Mutex具有成功等待的副作用,在等待到Mutex后,Mutex自動變為未激發態,直到調用ReleaseMutex使Mutex變為激發態為止。自動事件也具有成功等待的副作用。手動事件沒有,必須ResetEvent使手動事件變為未激發態。進程和線程也沒有成功等待的副作用。當線程或者進程函數返回時,線程內核對象變為激發態,但WaitForSingleObject并沒有使線程或者進程的內核對象變為未激發態。
總之,事件一般用于控制線程的先后順序,而Mutex一般用于排他的訪問資源。
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/anjen/archive/2009/10/26/4727791.aspx
1. 開源/文檔/社區/信息資源
1.01 http://www.kernel.org
Linux內核主頁
1.02 http://www.gnu.org or http://www.fsf.org
GNU/FSF主頁
1.03 http://www.opensource.org
Open Source權威網站
1.04 http://www.osdl.org
OSDL(Open Source Development Labs, Linus Torvalds的家)主頁
1.05 http://www.sourceforge.net
大型開放源碼軟件網站
1.06 http://freshmeat.net/
大型開放源碼軟件網站
1.07 http://osdir.com
開放源碼目錄,提供許多開放源碼軟件的索引和鏈接
1.08 http://www.rpmfind.net
提供RPM包的搜索和鏈接
1.09 http://oss.sgi.com/projects/
SGI的開放源碼Linux項目
1.10 http://oss.software.ibm.com/linux/
IBM的開放源碼Linux項目
1.11 http://www-124.ibm.com/developerworks/oss/
IBM developerWorks的開放源碼Linux項目
1.12 http://www.kerneltrap.org
內核開發相關信息和論壇
1.13 http://kernelnewbies.org
很好的內核學習網站
1.14 http://www.kernelhacking.org/
kernelhacking-HOWTO文檔
1.15 http://www.tldp.org
Linux文檔
1.16 http://www.nongnu.org/lkdp/
Linux內核文檔
1.17 http://linux-mm.org/
Linux內核mm文檔
1.18 http://www.linuxforum.net
中國Linux論壇
1.19 http://www.aka.org.cn
中國信息技術論壇-阿卡(AKA)
1.20 http://www.lisoleg.net
利索腳(Linux Source Learning Group)
1.21 http://www.linuxfans.org/
中國Linux公社
1.22 http://www-900.ibm.com/developerWorks/cn/linux
IBM developerWorks Linux專區
1.23 http://www.linuxaid.com.cn
LinuxAid技術支持中心
1.24 http://lxr.linux.no/source/
Cross-Referencing Linux,可在線查看Linux內核源代碼
1.25 http://www.linux.org
Linux信息資源
1.26 http://www.linuxdevices.com
嵌入式Linux信息資源
1.27 http://www.linuxjournal.com/webindex.php
Linux Journal雜志在線文章
1.28 http://www.joyfire.net/
本站joyfire大俠維護的站點
1.29 http://lwn.net
Linux Weekly News
1.30 http://www.ctyme.com/intr/int.htm
關于BIOS系統調用,很全
2. 項目資源
2.01 http://perso.wanadoo.es/xose/linux/linux_ports.html
Linux移植項目鏈接資源
2.02 http://www.uclinux.org
uClinux主頁
2.03 http://www.fsmlabs.com/ or http://www.rtlinux.org
RTLinux(Real-Time Linux)主頁
2.04 http://mail.aero.polimi.it/~rtai/
RTAI(Real Time Application Interface for Linux)主頁
2.05 http://www.ittc.ku.edu/kurt/
KURT-Linux(Kansas University Real-Time Linux)主頁
2.06 http://www.arm.linux.org.uk/
ARM Linux主頁
2.07 http://www.linux-mips.org/
Linux/MIPS主頁
2.08 http://penguinppc.org/
Linux/PowerPC主頁
2.09 http://www.denx.de
Denx Software Engineering, PowerPC系列嵌入式Linux資源
2.10 http://www.netfilter.org/ or http://www.iptables.org/
netfilter/iptables項目
2.11 http://www.linuxfromscratch.org
LFS(Linux From Scratch)項目
2.12 http://www.uclibc.org
uClibc(C library for developing embedded Linux systems)主頁
2.13 http://www.LinuxVirtualServer.org
章文嵩主持的Linux Virtual Server項目
2.14 http://linux-ha.org
High-Availability Linux項目
2.15 http://www.lids.org
本站vertex大俠主持的LIDS(Linux Intrusion Detection System)項目
2.16 http://www.minigui.org/
本站Kongming大俠主持的MiniGUI項目
2.17 http://user-mode-linux.sourceforge.net/
User-Mode Linux項目
2.18 http://lse.sourceforge.net/
Linux Scalability Effort項目
2.19 http://linuxperf.nl.linux.org/
Linux Performance Tuning項目
2.20 http://euclid.nmu.edu/~benchmark/
Linux Benchmark項目
link
http://www.360doc.com/userHome.aspx?userid=3630&cid=44
GTK的安裝
apt-get install build-essential #這將安裝gcc/g++/gdb/make 等基本編程工具
apt-get install gnome-core-devel #這將安裝 libgtk2.0-dev libglib2.0-dev 等開發相關的庫文件
apt-get install pkg-config #用于在編譯GTK程序時自動找出頭文件及庫文件位置
apt-get install devhelp #這將安裝 devhelp GTK文檔查看程序
apt-get install libglib2.0-doc libgtk2.0-doc #這將安裝 gtk/glib 的API參考手冊及其它幫助文檔
apt-get install glade libglade2-dev #這將安裝基于GTK的界面GTK是開發Gnome窗口的c/c++語言圖形庫。
apt-get install libgtk2.0*, gtk+2.0所需的所有文件統通下載安裝完畢。
應用程序編譯命令:gcc test.c `pkg-config --cflags --libs gtk+-2.0`,編譯通過,運行正常。
pkg-config是一個用來管理包的程序,在控制臺輸入 pkg-config --cflags --libs gtk+-2.0,可以發現輸出的文本包括了gcc編譯gtk+2.0所需要的所有選項(頭文件目錄和庫文件)。
這里有一點需要注意, gcc test.c `pkg-config --cflags --libs gtk+-2.0`, pkg-config --cflags --libs gtk+-2.0兩側的引號并不是真正的引號,而是鍵盤數字件那一行,最左邊的那個字符。如果錯用了單引號,gcc無法使用 pkg-config --cflags --libs gtk+-2.0產生的文本作為編譯選項。構造程序。
link
http://dev.mysql.com/doc/refman/5.1/zh/index.html
今年12月的SD2.0大會,在“語言與工具”專場,我們邀請到多核編程專家周偉明先生,為開發者們詳細介紹“多核編程模式”。本刊記者就多核編程的相關知識對周偉明先生做了專訪,下面為采訪內容。
CSDN:請問,您是從什么時候開始關注多核編程技術的?為什么選擇這個做研究領域?
周偉明:從97年開始,我開始接觸多線程程序方面以及分布式計算機環境(DCE)方面的開發,之后接觸了多處理服務器方面的軟件開發,并對它懷有濃厚的興趣。到了2002年后,發現多核處理器已經成為大勢所趨,因此開始關注多核編程技術。
在我的職業生涯中,發現大多數程序員沒有掌握如何寫好多線程程序的基本技術。在多處理器的多線程編程中,比以往單核時代的多線程編程要求高得多,可以說多核編程是一門比較新鮮且富于挑戰的技術,同時它又能產生巨大的社會價值,所以選擇它做研究領域。
CSDN:請您談談,多核編程技術都包括哪些方面?
周偉明:從大的方面講,多核編程技術主要包括并行計算、共享資源分布式計算、任務分解與調度、Lock-Free編程等內容。其中共享資源分布式計算、任務分解與調度是最重要的內容,也是大多數程序員未接觸過的內容。許多并行算法都可以通過共享資源分布式計算、任務分解與調度來實現。
CSDN:您之前說過,“像使用內存一樣使用CPU”,能具體闡述下嗎?
周偉明:在多核編程時,很重要的一個需求就是要做到當硬件升級,CPU核數增加后,程序不用修改,即保證程序隨CPU核數增長的擴展性。“像使用內存一樣使用CPU”主要是針對計算量不足情況下的一種處理措施,因為創建線程存在開銷,計算量不足時,創建過多的線程不僅不能使程序運行得更快,甚至會使程序變慢,而且還會增加能源消耗。比如一段和創建一個線程的計算量相當的計算運行在8核CPU上,顯然不能使用8個硬件線程來運行它,只使用一個硬件線程就足夠了。
CSDN:您認為,多核編程模式有什么重要的意義嗎?您選擇這個作為今年SD大會的議題,是由于什么考慮?
周偉明:多核編程模式主要是提供一種多核并行與分布式編程的普遍方法,這些思想很容易被普通程序員甚至普通人理解和掌握。有了這些編程模式后,程序員不再需要去學習各種復雜的并行算法,它可以復用現有的串行算法,輕易地實現并行和分布式計算。
之所以把這個作為今年SD大會的議題,主要是因為個人覺得多核編程模式是多核編程技術的精華部分,希望能和大家一起分享。
CSDN:很多人認為多核編程技術,特別高深,不易學習,您怎么看待這個問題?
周偉明:也許是有些人把多核編程技術理解成了并行計算技術的緣故,加上近些年學術界對復雜度高得出奇的Lock-Free編程研究非常熱,致使認為它特別高深,學習難度高,非要達到計算機博士水準才能掌握。
實際上大音希聲、大道至簡,最實用的多核編程技術并不是那些復雜的并行算法和Lock-Free算法。最實用的多核編程技術往往只要用到一些最簡單的串行編程技術,然后使用一定的模式把它并行化。比如多核中的查找算法,僅僅用最簡單的有序數組的查找,就可以通過分布式數據結構模式把它并行化。
在多核編程模式中,也沒有用到任何高深的思想,相反它用到的思想卻是來自人類社會中最原始、最普遍、最簡單的一些東西,如貪婪、自私、偷竊等。這些思想普通人都可以理解,更不用說程序員了。
許多復雜的并行計算現在都可以通過新的方法來實現,在去年的SD大會上,Intel的市場總裁James Reinders就講過了用任務調度來實現并行計算的通用方法。比如要寫一個并行排序算法,程序員只要懂得如何寫串行的排序算法,就可以使用任務調度方法把它自動變成并行算法,并且這種通過任務調度實現的并行算法比傳統的并行算法性能更好。
值得慶幸的是,將簡單串行算法并行化的各種模式都可以寫成象標準庫一樣的東西給程序員使用。Intel公司就提供了一個開源項目TBB給大家使用。所以對于普通程序員來說,掌握多核編程技術并不是一件難事,只要有多線程編程基礎的程序員都可以掌握。當然,就像C++標準模板庫STL一樣,掌握其基本原理和使用它對每個程序員都不是難事,但是要自己去實現它并不是每個程序員能做到的。多核編程技術也一樣,普通程序員掌握其基本原理和使用它不是難事,當然要實現一個基礎庫有一定難度,不是所有的程序員有能力能做到的事。
CSDN:如果有網友想提升自己在多核編程方面的水平,您有什么建議?應該怎么學習?采用怎樣的步驟?需要掌握哪些工具或技術,應注意什么問題?
周偉明:要提高多核編程水平,首先要掌握多線程編程基礎技術和OpenMP編程技術,其次,要掌握多核處理器的一些特殊地方,如Cache方面的偽共享問題,原子操作等,這是做多核編程的基礎。
有了上面的基礎后,就可以開始學習如何將計算均攤到各個CPU核上的方法,這里主要涉及到并行計算、共享資源分布式計算、任務分解與調度方面的技術。
由于市面上暫時還缺乏共享資源分布式計算、任務分解與調度方面的書籍資料,所幸的是Intel的開源項目TBB中有一些共享資源分布式計算、任務分解與調度方面的源代碼。所以這方面的內容暫時可以通過Intel的開源項目TBB的源代碼去學習。當然也可以到ACM, IEEE, Elsevier里去找一些相關的論文看看。
并行計算方面的內容可以通過許多書籍以及一些這方面的開源項目去學習。由于可以通過任務調度的方法進行并行計算,因此對于普通程序員,這方面的內容并不用學很多,有所了解即可。
當然,還需要學習多線程調試測試方面的技術,這牽涉到代碼靜態分析方法,如何設計測試用例使程序中的問題暴露出來,如何調試定位問題等內容。也有些工具可以輔助程序員檢查程序中的錯誤,如Intel的C++編譯器里帶有一些檢查多線程程序錯誤的輔助工具。同時Intel的網站上還提供了能耗測試的工具可以檢查程序的能源消耗情況,可以幫助程序員進一步優化程序,寫出更環保的程序來。
如果要更深入的掌握多核編程技術,Lock-Free編程技術也是需要有一定了解的,在具有垃圾收集機制的編程環境中,Lock-Free編程技術在某些情況下有它的使用價值。學習Lock-Free編程技術并一定需要去使用它,而是通過它可以更好地理解多線程編程方面所面臨的復雜問題,對于提高程序員對多線程編程方面的理解和代碼質量會有一定的幫助。
在學習多核編程技術時,最重要的是掌握如何將計算均勻分攤到各個CPU核上的原理和方法,并不需要去死記一些算法。
CSDN:您能否介紹推薦一些多核編程方面的書籍?
周偉明:目前市面上專門關于多核編程的書較少,有大影響力的書籍幾乎沒有。雖然如此,但是還是有些書籍有很好的參考和借鑒價值。
《多核程序設計技術——通過軟件多線程提升性能》一書由Intel公司的工程師寫作而成,講解了Intel處理器相關的多線程基礎知識,同時也講解了一些OpenMP方面的編程知識,可以當作一本多線程方面的基礎參考書籍。
《Intel Threading Building Blocks》一書由Intel的市場總裁James Reinders寫作而成,由O’Reilly出版,詳細介紹了Intel的開源項目TBB庫的使用方法,唯一的不足是這本書沒有剖析其中的原理,也許是覺得代碼難度過高的原因。這本書在國內的購書網站上可以買到英文版的,不過價格比較高。
《多處理器編程的藝術》由一位美國大學教授和一位Sun實驗室的技術人員合著。這本書的學術性內容較強,重點內容為Lock-Free方面的編程技術,有較高的難度,對于想深入學習和使用Lock-Free編程技術的人員(特別是使用Java和C#編程語言的人員),不妨參考一下這本書的一些內容。這本書已經由國內出版社引進了英文版,可以在國內買到。
對于并行計算方面的書籍,國內已經出版了很多。有很多翻譯過來的,如《并行計算導論》、《并行計算綜論》、《并行程序設計》、《并行編程模式》、《MPI與OpenMP程序設計》、《并行處理基本原理》等。也有國內人原創的,如陳國良編著的《并行計算——結構?算法?編程》,《并行算法的設計與分析》,《并行算法實踐》等。請恕我不能一一列出,這些書可以作為并行算法方面的參考書籍,美中不足的是這些書都不是專門針對多核環境而寫的,所以普通程序員看了之后要把它變成多核環境中的程序也許會有一定難度。
對于多核程序調試測試方面的書籍,目前國內還沒有發現這方面專門的書籍。前面介紹的書籍中,有些書籍也談到了一些多核程序調試測試的方法。對于多線程程序的調試,《軟件調試》這本書中有些內容值得參考。對于如何設計測試用例、寫測試程序將程序中的問題暴露出來,雖有自夸之嫌,但還是要推薦大家不妨參考一下我寫的《軟件測試實踐》中的一些方法。
CSDN:聽說您最近在撰寫一本有關多核編程的書,這是怎樣的一本書?請簡單介紹一下。
周偉明:從去年6月開始,我就在使用全職時間寫作一本名為《多核計算與程序設計》的多核編程方面的書。
這本書的核心內容就是共享資源分布式計算、任務分解與調度方面的內容,這些內容需要使用今年將在SD大會上講的各種多核編程模式。同時也有一部分并行計算方面的內容,不過與以往的并行計算方面的書不同的是,這本書的并行計算方面的內容是專門針對多核環境的,如并行搜索、并行排序、并行數值計算等內容都會涉及到CPU核數的擴展性,CPU Cache的偽共享問題等多核相關的內容。
當然書中也介紹了一些多線程編程基礎知識、OpenMP編程基礎知識、Lock-Free編程基礎知識等基礎內容。
這本書目前正在出版社內進行編輯加工,如不出意外,明年4月份左右估計可以上市。
CSDN:對于今年的SD大會,您有什么期望或者祝福嗎?
周偉明:從去年的SD大會舉辦情況來看,它舉辦得非常成功,毫不夸張地說它已經成為了我國IT行業內影響力最大的一個技術盛會。非常好地促進了先進技術在我國軟件行業的交流和推廣,對提升我國軟件企業的技術水平起了很好的引導作用。
對于今年的SD大會,自然希望有更多的技術人員參加,有更多的各個專業領域的重量級的最先進技術在會上進行演講和交流,使之成為影響和提升中國軟件技術發展的一場盛會。
被采訪者簡介:
周偉明先生,畢業于上海交通大學,1994年開始從事專業軟件開發,曾工作于美國加州硅谷的DASCOM Inc公司(現為IBM的全資子公司)和華為技術有限公司等企業。在網絡安全軟件、服務端軟件、機器翻譯軟件、工具軟件、嵌入式系統等領域都擁有豐富的專業實踐經驗。近年來周偉明先生潛心研究多核編程技術,于2006年編著出版了國內第一本專門研究多任務情況下數據結構與算法的專著,獲得業界的好評。此后周偉明先生再接再厲,更加深入地研究多核程序設計中范圍更加廣泛的重要的主題,提出多核程序設計的新觀念——“象使用內存一樣使用CPU”,并且致力與編寫一本新的多核編程技術著作,將自己的研究成果和技術思路總結出來。
link
http://www.bb.ustc.edu.cn/jpkc/guojia/bxjs/index.htm
link :
http://blog.chinaunix.net/u/22935/showart_340462.html
http://www.yuanma.org/data/2010/0111/article_4102.htm