国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

多線程技術(shù)在云存儲視圖庫中的應(yīng)用

2015-03-19 03:00:37尹莉莉
新媒體研究 2015年15期
關(guān)鍵詞:線程對象界面

尹莉莉

安徽四創(chuàng)電子股份有限公司,安徽合肥 230088

1 多線程的同步技術(shù)

開發(fā)人員在進(jìn)行多線程編程時,為了使得各個線程能夠協(xié)同工作,必須要用到線程同步技術(shù)。下面將針對臨界區(qū)、事件及互斥對象這幾種windows線程的同步技術(shù)進(jìn)行介紹。

1.1 臨界區(qū)對象

臨界區(qū)其實就是一段代碼,它的作用就是控制共享資源不被同時訪問,比如一個線程進(jìn)入臨界區(qū)訪問共享資源后,其他想訪問該共享資源的線程將被拒絕訪問,處于掛起狀態(tài),直到臨界區(qū)釋放后,其他線程才可以繼續(xù)搶占。利用臨界區(qū)對象控制線程同步的方法如下。

1)定義臨界區(qū)對象,該對象是全局變量。

CRITICAL_SECTION g_s;

2)初始化臨界區(qū)對象。

InitializeCriticalSection(&g_s);

3)進(jìn)入臨界區(qū)。

EnterCriticalSection(&g_s);

4)釋放臨界區(qū)。

LeaveCriticalSection(&g_s);

1.2 事件對象

事件對象是一種抽象的對象,有受信和未受信兩種狀態(tài),一般和WaitForSingleObject函數(shù)一起使用,該函數(shù)根據(jù)事件的受信狀態(tài)來判斷是否讓線程訪問該共享數(shù)據(jù)。利用事件對象來保持線程同步的方法如下。

1)創(chuàng)建事件內(nèi)核對象并保存事件對象的句柄。

HANDLE g_hEvent;//全局變量。

g_hEvent = CreateEvent(NULL,FALSE,FALSE,FALSE,NULL);

createEvent函數(shù)可根據(jù)參數(shù)傳入的不同,來決定是否需要手動重置事件對象,同時也可以決定事件創(chuàng)建的初始狀態(tài),即受信還是未受信。

2)更改事件對象的狀態(tài)。

SetEvent(g_hEvent);//設(shè)置事件狀態(tài)為受信狀態(tài)

ReleaseEvent(g_Event);//設(shè)置事件狀態(tài)為無信號狀態(tài)

3)使用WaitForSingleObject函數(shù)來控制線程對共享資源的訪問。

WaitForSingleObject(g_hEvent,INFINITE);

當(dāng)事件對象是受信狀態(tài)時,則該線程可以訪問共享資源。

1.3 互斥內(nèi)核對象

互斥對象也是一種內(nèi)核對象,其與前面兩種保持同步的方法類似,利用該技術(shù)進(jìn)行線程同步的方法如下。

1.3.1 創(chuàng)建互斥對象并保存對象句柄

HANDLE g_hMutex;//全局變量

g_hMutex = CreateMutex(NULL,FALSE,NULL);//第二個參數(shù)一般設(shè)置為false,表示該對象沒有被任何線程所占用。

1.3.2 在線程函數(shù)中使用WaitForSingleObject

WaitForSingleObject(g_hEvent,INFINITE);

1.3.3 釋放互斥對象

ReleaseMutex(g_hMutex);

2 多線程的優(yōu)缺點

任何東西都有它的兩面性,同樣多線程也是一把雙刃劍,有它的優(yōu)點也有它的缺點。

首先,多線程的優(yōu)點如下。

1)提高界面程序響應(yīng)速度。

當(dāng)一個程序既要執(zhí)行耗時的任務(wù),又要更新窗口及接受相關(guān)界面操作時,如云存儲視圖庫的客戶端界面程序,如果該程序是單線程程序,則會導(dǎo)致界面的卡死,從用戶的角度來說,這個應(yīng)用程序就像處于無響應(yīng)狀態(tài)一樣。如果程序是多線程程序,可以把耗時任務(wù),比如視頻的點播,文件的上傳下載等傳遞給后臺線程,當(dāng)后臺線程在執(zhí)行這些功能的時候,主線程就可以及時的處理用戶對界面的操作請求,從用戶的體驗感上來講,程序的響應(yīng)速度就比單線程要快的多。

2)資源利用率高。

因為電腦的工作原理是輪轉(zhuǎn)時間片進(jìn)行操作,而操作系統(tǒng)中分配時間片的操作是以線程為準(zhǔn)的,對比實現(xiàn)同樣功能的多線程程序和單線程程序,多線程程序被分配的時間片就比單線程程序多了,從而cpu在它上面花費的時間就多了,這就充分的利用了cpu資源。比如上傳下載文件,當(dāng)用戶上傳第一個文件時,cpu會等待第一個文件上傳完成,如果接下來繼續(xù)上傳其他文件,cpu在上傳文件的同時就可以對已上傳完成的文件進(jìn)行下載了,因為在執(zhí)行文件上傳時,cpu還有很多空閑的時間,可以給下載線程分配一定的時間片來執(zhí)行下載,從而提高了cpu資源的利用率。

其次,多線程的缺點如下。

1)設(shè)計復(fù)雜。

有一些多線程應(yīng)用程序比單線程的應(yīng)用程序要簡單,但是一般情況下多線程的設(shè)計還是更復(fù)雜一點,尤其當(dāng)多個線程共享進(jìn)程數(shù)據(jù)的時候,需要用到同步技術(shù),處理不當(dāng)就有可能造成線程的死鎖。

2)頻繁切換上下文的開銷。

Cpu是通過分配時間片來控制線程的交替執(zhí)行的,當(dāng)一個線程的時間片被用完時,cpu就要準(zhǔn)備從該線程切換到下一個被分配到時間片的線程,此時就需要cpu記錄當(dāng)前線程的相關(guān)信息,如線程的相關(guān)數(shù)據(jù),程序的地址等,這些操作完成后,cpu才可以載入另一個線程的相關(guān)數(shù)據(jù)開始執(zhí)行。由此可知,如果程序是多線程程序,由于線程數(shù)量較多,系統(tǒng)將會花費大量的時間來處理線程的頻繁切換,這就可能降低程序的執(zhí)行效率。

3)資源消耗的增加。

多線程程序在充分利用cpu資源的情況下,也會加大對資源的消耗量,因為每個線程都要有自己的一個堆棧,這就加大了對內(nèi)存的使用,同時程序還需要一些資源來管理線程,這些都導(dǎo)致了資源消耗的增加。

3 結(jié)論

綜上可知,多線程的使用有利有弊,在軟件開發(fā)中,到底需不需要用到多線程編程需要考慮很多因素,也需要結(jié)合程序功能的實際情況。一般情況下,多線程技術(shù)在項目開發(fā)中還是得到了廣泛應(yīng)用,因為在大多數(shù)項目開發(fā)中,多線程的優(yōu)勢還是明顯大于劣勢的。

[1]王艷平,Windows程序設(shè)計[M].2版.北京:人民郵電出版社,2008.

[2]章秦.Win32多線程同步技術(shù)淺析[J].電子設(shè)計工程,2011.

猜你喜歡
線程對象界面
神秘來電
睿士(2023年2期)2023-03-02 02:01:09
國企黨委前置研究的“四個界面”
攻略對象的心思好難猜
意林(2018年3期)2018-03-02 15:17:24
基于FANUC PICTURE的虛擬軸坐標(biāo)顯示界面開發(fā)方法研究
淺談linux多線程協(xié)作
人機(jī)交互界面發(fā)展趨勢研究
基于熵的快速掃描法的FNEA初始對象的生成方法
區(qū)間對象族的可鎮(zhèn)定性分析
手機(jī)界面中圖形符號的發(fā)展趨向
新聞傳播(2015年11期)2015-07-18 11:15:04
Linux線程實現(xiàn)技術(shù)研究
永寿县| 巧家县| 绥滨县| 巴里| 榆林市| 平罗县| 仙居县| 康马县| 阳城县| 崇义县| 沁阳市| 乐都县| 泰宁县| 延吉市| 金寨县| 大田县| 普兰店市| 赤壁市| 临沭县| 宝清县| 丰镇市| 威宁| 涞水县| 定边县| 高要市| 榆树市| 达州市| 东台市| 水城县| 星子县| 城步| 北宁市| 海口市| 噶尔县| 通州区| 南阳市| 柳江县| 晴隆县| 上林县| 通许县| 邹城市|