導航:首頁 > 軟體問題 > 如何提高軟體並發性任務

如何提高軟體並發性任務

發布時間:2022-05-06 16:40:15

⑴ 如何利用Java開發高性能高並發Web應用.ppt

1、提供HTML靜態訪問

web界面上最快的訪問速度是什麼?當然是最原始的HTML文件訪問,對於其他語言 比如 jsp ,asp,php等等,他們首先要通過伺服器解析成html之後在返回給訪問者,如果我們能提供全部是htm來的頁面,那麼就能大大的降低伺服器和資料庫資源的利用和提高網站的並發,所以我們盡可能使我們的網站上的頁面採用靜態頁面來實現,這個最簡單的方法其實也是最有效的方法。當然實現這種方式大家比較了解的就是信息發布系統CMS,信息發布系統可以實現最簡單的信息錄入自動生成靜態頁面,還能具備頻道管理、許可權管理、自動抓取等功能,對於一個大型網站來說,擁有一套高效、可管理的CMS是必不可少的。
在後續的文章中我們會單獨的使用jsp + servlet實現一個簡單的信息發布系統.
2、使用獨立的圖片伺服器

為什麼要把圖片單獨設置一個伺服器?對於Web伺服器來說,圖片消耗的伺服器資源是最多的,如果能把所有的圖片資源放到一個單獨的圖片伺服器中進行處理的話,可以降低提供頁面訪問請求的伺服器系統壓力,從而能進一步的提高web程序的並發.所以在有條件的情況下最好能把圖片放置到一個單獨的伺服器中.
3、配置多台資料庫伺服器,多個資料庫集群
集群(Cluster)技術是使用特定的連接方式,將價格相對較低的硬體設備結合起來,同時也能提供高性能相當的任務處理能力。
越是大型高並發的應用,資料庫的壓力就會越大,如果資料庫操作很頻繁,資料庫的瓶頸很快就能顯現出來,這時一台資料庫將很快無法滿足應用,於是我們需要使用資料庫集群。
資料庫集群就是使用多個資料庫伺服器分擔請求的壓力,達到快速響應的目的.
4、使用緩存
所謂的緩存就是把數據咱是放置到內存中,前台在請求的時候直接從內存中讀取數據,而不需要去查詢資料庫或者讀取文件等,這樣就能做到最快的響應。網站架構和網站開發中的緩存是非常重要的。
目前有很多開源的緩沖實現方案,APC,File,SQLite,Memcache等等各種類庫實現著不同的緩存方式,只有通過了解他們的實現方式,根據具體應用具體選擇,才會使緩存系統發揮出最大的性能。
對於java開發來說,大名頂頂的 分布式緩存系統Memcache 可能是最好的選擇,他提供一個基於Socket的訪問方式,使得該緩存系統支持遠程讀寫訪問。盡管這個緩存的內容可能是存在內存中,也可能是存在文件內。

⑵ Java多線程MasterWorker模式如何在高並發情況下優化

你說的Master指的是java的線程池吧,我之前做過一個項目,因為項目在內網拿不出來,我給你說一下我那次的經驗。

幾個關鍵點:

1、java線程池:使用java提供的ThreadPoolExecutor類構造主池,再構造一個輔池(輔池的作用在於當主池進入拒絕策略的時候,可以啟動輔池,幫助主池分擔一部分線程,或者在主池shutdown的瞬間又有任務進來,也會走到拒絕策略,此時可以啟動輔池處理這些線程,一般情況下輔池不會啟動),排隊策略使用LinkedBlockingQueue隊列。

2、單例模式:利用spring的IOC容器的單例性,每次取線程池時,從IOC容器中注入。創建一個組件類BatPool(spring組件默認為單例),裡面再使用單例模式創建線程池,單例中的單例,保證單例性:


@Component

classBatPool{

privateThreadPoolExecutor mainPool;

ThreadPoolExecutor create(){

if(mainPool== null){

retrun new ThreadPoolExecutor();

}else{

retrunmainPool;

}

...

}


業務中:

@Autowired

BatPool batPool;

ThreadPoolExecutor pool =batPool.create();

...


線程池的配置你自己參考網上吧

這樣在業務中,每次取到的池都是同一個池,不會多次創建。

如果你沒有使用spring的話,我再想想辦法怎麼實現全局的單例模式

⑶ 如何處理高並發

處理高並發的六種方法

1:系統拆分,將一個系統拆分為多個子系統,用bbo來搞。然後每個系統連一個資料庫,這樣本來就一個庫,現在多個資料庫,這樣就可以抗高並發。

2:緩存,必須得用緩存。大部分的高並發場景,都是讀多寫少,那你完全可以在資料庫和緩存里都寫一份,然後讀的時候大量走緩存不就得了。畢竟人家redis輕輕鬆鬆單機幾萬的並發啊。沒問題的。所以你可以考的慮考慮你的項目里,那些承載主要請求讀場景,怎麼用緩存來抗高並發。

3:MQ(消息隊列),必須得用MQ。可能你還是會出現高並發寫的場景,比如說一個業務操作里要頻繁搞資料庫幾十次,增刪改增刪改,瘋了。那高並發絕對搞掛你的系統,人家是緩存你要是用redis來承載寫那肯定不行,數據隨時就被LRU(淘汰掉最不經常使用的)了,數據格式還無比簡單,沒有事務支持。所以該用mysql還得用mysql啊。那你咋辦?用MQ吧,大量的寫請求灌入MQ里,排隊慢慢玩兒,後邊系統消費後慢慢寫,控制在mysql承載范圍之內。所以你得考慮考慮你的項目里,那些承載復雜寫業務邏輯的場景里,如何用MQ來非同步寫,提升並發性。MQ單機抗幾萬並發也是ok的。

4:分庫分表,可能到了最後資料庫層面還是免不了抗高並發的要求,好吧,那麼就將一個資料庫拆分為多個庫,多個庫來抗更高的並發;然後將一個表拆分為多個表,每個表的數據量保持少一點,提高sql跑的性能。

5:讀寫分離,這個就是說大部分時候資料庫可能也是讀多寫少,沒必要所有請求都集中在一個庫上吧,可以搞個主從架構,主庫寫入,從庫讀取,搞一個讀寫分離。讀流量太多的時候,還可以加更多的從庫。

6:solrCloud:
SolrCloud(solr 雲)是Solr提供的分布式搜索方案,可以解決海量數據的 分布式全文檢索,因為搭建了集群,因此具備高可用的特性,同時對數據進行主從備份,避免了單點故障問題。可以做到數據的快速恢復。並且可以動態的添加新的節點,再對數據進行平衡,可以做到負載均衡:

⑷ javaWeb如何提高並發數

  1. 對Collection、Map介面的類對象初始化時要先分配合理的空間大小,同時還要按照自已的實際需求選擇合適的對象。

2.優化循環體

循環是比較重復運行的地方,如果循環次數很大,循環體內不好的代碼對效率的影響就會被放大而變的突出。

3.少用new初始化一個實例

盡量少用new來初始化一個類的實例,當一個對象是用new進行初始化時,其構造函數鏈的所有構造函數都被調用到,所以new操作符是很消耗系統資源的,new一個對象耗時往往是局部變數賦值耗時的上千倍。同時,當生成對象後,系統還要花時間進行垃圾回收和處理。當new創建對象不可避免時,注意避免多次的使用new初始化一個對象。盡量在使用時再創建該對象,另外,應該盡量重復使用一個對象,而不是聲明新的同類對象。一個重用對象的方法是改變對象的值,如可以通過setValue之類的方法改變對象的變數達到重用的目的。

4 .選擇合適的方法調用:

在Java中,一切都是對象,如果有方法(Method)調用,處理器先要檢查該方法是屬於哪個對象,該對象是否有效,對象屬於什麼類型,然後選擇合適的方法並調用。可以減少方法的調用,不影響可讀性等情況下,可以把幾個小的方法合成一個大的方法。另外,在方法前加上final,private關鍵字有利於編譯器的優化。

5.異常處理技巧

異常是Java的一種錯誤處理機制,對程序來說是非常有用的,但是異常對性能不利。拋出異常首先要創建一個新的對象,並進行相關的處理,造成系統的開銷,所以異常應該用在錯誤處理的情況,不應該用來控製程序流程,流程盡量用while,if等處理。在不是很影響代碼健壯性的前提下,可以把幾個try/catch塊合成一個。

6 .盡量使用局部變數

盡量使用局部變數,調用方法時傳遞的參數以及在調用中創建的臨時變數都保存在棧(Stack) 中,速度較快。其他變數,如靜態變數、實例變數等,都在堆(Heap)中創建,速度較慢。

7.同步處理技巧

同步主要出現在多線程的情況,為多線程同時運行時提供對象數據安全的機制,多線程是比較復雜話題,應用多線程也是為了獲得性能的提升,應該盡可能減少同步。

另外,如果需要同步的地方,可以減少同步的代碼段,如只同步某個方法或函數,而不是整個代碼。

8 .盡可能的使用Java自身提供的API

Java的API一般都做了性能的考慮,如果完成相同的功能,優先使用API而不是自己寫的代碼,如數組復制。

9 .盡量減少I/O操作

輸入/輸出(I/O)包括很多方面,我們知道,進行I/O操作是很消耗系統資源的。程序中應該盡量少用I/O操作。使用時可以注意: . 合理控制輸出函數System.out.println()對於大多時候是有用的,特別是系統調試的時候,但也會產生大量的信息出現在控制台和日誌上,同時輸出時,有序列化和同步的過程,造成了開銷。

特別是在發行版中,要合理的控制輸出,可以在項目開發時,設計好一個Debug的工具類,在該類中可以實現輸出開關,輸出的級別,根據不同的情況進行不同的輸出的控制。

10 .盡量使用緩存

讀寫內存要比讀寫硬碟上的文件要快很多,應盡可能使用緩沖,以便直接從內存中讀取數據。盡可能使用帶有Buffer的類代替沒有Buffer的類,如可以用BufferedReader 代替Reader,用BufferedWriter代替Writer來進行處理I/O操作。

同樣可以用BufferedInputStream代替InputStream都可以獲得性能的提高

11 .盡量不使用同步:

Servlet是多線程的,以處理不同的請求,基於前面同步的分析,如果有太多的同步就失去了多線程的優勢了。

12.不用保存太多的信息在HttpSession中

很多時候,存儲一些對象在HttpSession中是有必要的,可以加快系統的開發,如網上商店系統會把購物車信息保存在該用戶的Session中,但當存儲大量的信息或是大的對象在會話中時,是有害的,特別是當系統中用戶的訪問量很大,對內存的需求就會很高。具體開發時,在這兩者之間應作好權衡。

13.清除SESSION:

通常情況,當達到設定的超時時間時,同時有些Session沒有了活動,伺服器會釋放這些沒有活動的Session,.. 不過這種情況下,特別是多用戶並訪時,系統內存要維護多個的無效Session。當用戶退出時,應該手動釋放,回收資源,實現如下:..
HttpSession theSession = request.getSession();
// 獲取當前Session
if(theSession != null){
theSession.invalidate(); // 使該Session失效
}

14 .緩存Home介面

EJB庫使用Enterprise Bean 的客戶端通過它的Home介面創建它的實例。客戶端能通過JNDI訪問它。伺服器通過Lookup方法來獲取。
JNDI是個遠程對象,通過RMI方式調用,對它的訪問往往是比較費時的。所以,在設計時可以設計一個類專門用來緩存Home介面,在系統初始化時就獲得需要的Home介面並緩存,以後的引用只要引用緩存即可。

15 .使用快速度的Jdbc驅動

JDBC API包括兩種實現介面形式,一種是純Java實現的驅動,一種利用ODBC驅動和資料庫客戶端實現,具體有四種驅動模式:

第一類:JDBC-ODBC橋,再加上ODBC驅動程序。
JDBC驅動程序是JDBC-ODBC橋再加上一個ODBC驅動程序。建議第一類驅動程序只用於原型開發,而不要用於正式的運行環境。橋接驅動程序由Sun提供,它的目標是支持傳統的資料庫系統。Sun為該軟體提供關鍵問題的補丁,但不為該軟體的最終用戶提供支持。一般地,橋接驅動程序用於已經在ODBC技術上投資的情形,例如已經投資了Windows應用伺服器。
盡管Sun提供了JDBC-ODBC橋接驅動程序,但由於ODBC會在客戶端裝載二進制代碼和資料庫客戶端代碼,這種技術不適用於高事務性的環境。另外,第一類JDBC驅動程序不支持完整的Java命令集,而是局限於ODBC驅動程序的功能,這種驅動方式也叫胖客戶,主要用於低並發請求,大數據量傳輸的應用。

第二類:本機API,部分是Java的驅動程序。
JDBC驅動程序是本機API的部分Java代碼的驅動程序,用於把JDBC調用轉換成主流資料庫API的本機調用。這類驅動程序也存在與第一類驅動程序一樣的性能問題,即客戶端載入二進制代碼的問題,而且它們被綁定了特定的平台。
第二類驅動程序要求編寫面向特定平台的代碼,主流的資料庫廠商,例如Oracle和IBM,都為它們的企業資料庫平台提供了第二類驅動程序,使用這些驅動程序的開發者必須及時跟進不同資料庫廠商針對不同操作系統發行的各個驅動程序版本。
另外,由於第二類驅動程序沒有使用純Java的API,把Java應用連接到數據源時,往往必須執行一些額外的配置工作。很多時候,第二類驅動程序不能在體系結構上與大型主機的數據源兼容;即使做到了兼容,效果也是比較差。

第三類:面向資料庫中間件的純Java驅動程序。
JDBC驅動程序是面向資料庫中間件的純Java驅動程序,JDBC調用被轉換成一種中間件廠商的協議,中間件再把這些調用轉換到資料庫API。第三類JDBC驅動程序的優點是它以伺服器為基礎,也就是不再需要客戶端的本機代碼,這使第三類驅動程序要比第一、二兩類快。另外,開發者還可以利用單一的驅動程序連接到多種資料庫。

第四類:直接面向資料庫的純Java驅動程序。
JDBC驅動程序是直接面向資料庫的純Java驅動程序,即所謂的「瘦」(thin)驅動程序,它把JDBC調用轉換成某種直接可被DBMS使用的網路協議,這樣,客戶機和應用伺服器可以直接調用DBMS伺服器。對於第四類驅動程序,不同DBMS的驅動程序不同。因此,在一個異構計算環境中,驅動程序的數量可能會比較多。但是,由於第四類驅動程序具有較高的性能,能夠直接訪問DBMS,所以這一問題就不那麼突出了, 這種驅動方式,主要用於高並發,低數據量請求的應用中。

16.使用Jdbc鏈接池

為了提高訪問資料庫的性能,我們還可以使用JDBC 2.0的一些規范和特性,JDBC是佔用資源的,在使用資料庫連接時可以使用連接池Connection Pooling,避免頻繁打開、關閉Connection。而我們知道,獲取Connection是比較消耗系統資源的。
Connection緩沖池:當一個應用程序關閉一個資料庫連接時,這個連接並不真正釋放而是被循環利用,建立連接是消耗較大的操作,循環利用連接可以顯著的提高性能,因為可以減少新連接的建立。

一個通過DataSource獲取緩沖池獲得連接,並連接到一個CustomerDB數據源的代碼演示如下:
Context ctx = new InitialContext();
DataSource dataSource = (DataSource) ctx.lookup(「jdbc/CustomerDB」);
Connection conn = dataSource.getConnection(「password」,」username」);

17.緩存DataSorce

一個DataSource對象代表一個實際的數據源。這個數據源可以是從關系資料庫到表格形式的文件,完全依賴於它是怎樣實現的,一個數據源對象注冊到JNDI名字服務後,應用程序就可以從JNDI伺服器上取得該對象,並使用之和數據源建立連接。
通過上面的例子,我們知道DataSource是從連接池獲得連接的一種方式,通過JNDI方式獲得,是佔用資源的。
為了避免再次的JNDI調用,可以系統中緩存要使用的DataSource。

18.即時關閉使用過的資源

互聯網應用系統一般是並發的系統,在每次申請和使用完資源後,應該釋放供別人使用,使用完成後應該保證徹底的釋放。

19 .架構選型

CoreMediaCMS將整個應用分成四成架構,每一層都可以獨立於其他層而正常運行,每一層都可以分布式布署,極大的提高了應用系統的穩定性、可擴展性、支持高並發的要求,每一次之前通過中間件Corba進行穩定的傳輸數據。

20 .開發框架的選型

充分利用開源框架,可以大大提高開發效率。很多初級開發者,都採用DB JavaBean JSP這種初級的開發模式,而現在主要使用Struts、Spring等MVC開發框架。

常用開發框架構選型有:

Struts、Spring、Webwork等。

天極傳媒選擇的開發框架是:Struts Spring iBatis,在這個開發框架里,充分利用了Struts、Spring各自己的優點,可以選擇StutsMVC,也可以選擇Spring MVC。

21.分級存儲

1)資料庫數據分級存儲:

將經常訪問的數據和訪問頻度低的數據,分別存放到不同的分區,甚至存放到不同的資料庫伺服器,以便合進分配硬碟I/O及系統I/O。

2)網站內容發布之後,分級存儲:

任何一個大型的網站,一般都有海量的內容,為了提高訪問效率,應搭建分級存儲體系,根據應用的重要性和訪問並發要求,將這些內容分級存儲,同時將靜態內容中的靜態頁面文件、圖片文件、下載文件分不同的Web伺服器訪問,降低I/O爭用,提高訪問效率,同時讓數據存儲、管理、備份更加清晰。

22 .頁面靜態化

一個大型網站,既有靜態內容,也有動態內容。靜態內容,直接通過Apache或者Squid訪問,效率高,穩定可靠,更多的是受伺服器等硬體設備的I/O吞吐量、網路環境及頁面代碼本身質量限制,不受應用系統及資料庫性能限制,這些內容往往訪問速度和效率不會有較大的問題。

而動態內容,除了受硬體設備I/O、操作系統I/O及內容、網路環境及頁面代碼的影響,還要受應用伺服器和資料庫性能影響,因此,這部份內容,要盡可能作靜態化或者偽靜態,並採用緩存技術,將其緩存,以減少對應用伺服器和資料庫伺服器的操作次數,提高用戶訪問效率和穩定性。

23.緩存策略

對於構建的業務系統,如果有些數據要經常要從資料庫中讀取,同時,這些數據又不經常變化,這些數據就可以在系統中緩存起來,使用時直接讀取緩存,而不用頻繁的訪問資料庫讀取數據。
緩存工作可以在系統初始化時一次性讀取數據,特別是一些只讀的數據,當數據更新時更新資料庫內容,同時更新緩存的數據值。

例如:在CMS2005系統中,我們將很少發生變化的網站節點樹數據,緩存在客戶端,當用戶登錄時,一次性讀入到客戶端緩存起來,以後編輯在使用時,不用再從資料庫中讀取,大大提高了應用系統的訪問速度。

當然,也可以將資料庫中重復訪問的數據緩存在應用伺服器內存中,減少對資料庫的訪問次數,Java常用的緩存技術產品有:MemoryCache、OSCache等。

⑸ 如何提高MySQL並發能力的思路

1、使用行級別鎖,避免表級別或頁級別鎖
盡量使用支持行級別鎖的存儲引擎,如InnoDB;只在讀操作顯著多於寫作的場景中(如數據倉庫類的應用)使用表級別鎖的存儲引擎,如MyISAM;。
2、降低熱巨鎖(hot gaint lock)出現的可能性以盡可能避免全局互斥量
臨界區(僅允許單一線程訪問的資源)會嚴重降低MySQL系統並發性;InnoDB緩沖池(buffer pool)、數據字典等都是常見的臨界區;幸運的是,新版本的InnoDB已經能夠較好的運行於多核處理器,支持使用 innodb_buffer_pool_instances伺服器變數建立多個緩沖池實例,每個緩沖池實例分別自我管理空閑列表、列表刷寫、LRU以及其它跟緩沖池相關的數據結構,並通過各自的互斥鎖進行保護。
3、並行運行多個I/O線程
通過innodb_io_capacity伺服器變數等增加磁碟I/O線程的數量可以提高前端操作(如SELECT)的性能,不過,磁碟I/O線程的數量不應該超過磁碟的IOPS(7200RPM的單塊硬體的IOPS數量一般為100個左右)。
此外,非同步I/O也可以在一定程度上提高系統的並發能力,在Linux系統上,可以通過將MySQL的伺服器變數innodb_use_native_aio的值設定為ON設定InnoDB可以使用Linux的非同步I/O子系統。
4、並行後端任務
默認情況下,MySQL的清寫(purge)操作(用於移除帶刪除標記的記錄)由InnoDB的主線程完成,這可以降低內部資源競爭發生的概率,進而增強MySQL服務伸縮能力。不過,隨著InnoDB內部各式各樣的競爭越來越多,這種設置帶來的性能優勢已幾乎不值一提,因此,生產環境中應該通過為innodb_purge_threads伺服器變數設定為ON將主線程與清寫線程分開運行。
5、單線程復制模型中的SQL線程是一個熱區
在從伺服器上並行運行多個SQL線程可有效提高MySQL從伺服器性能,MySQL 5.6支持多線程復制(每庫一個復制線程);

⑹ 提高計算機系統並行性的技術途徑有哪三個

(1)時間重疊。在並行性概念中引入時間因素,即多個處理過程在時間上相互錯開,輪流重疊地使用同一套硬體設備的各個部分,以加快硬體周轉時間而贏得速度。

(2)資源重復。在並行性概念中引入空間因素,以數量取勝的原則,通過重復設置硬體資源,大幅度提髙計算機系統的性能。隨著硬體價格的降低,這種方式在單處理機中廣泛使用,而多處理機本身就是實施「資源重復」原理的結果。因此資源重復可稱為空間並行技術。

⑺ 簡述開發並行性的三種途徑

開發並行性的三種途徑:
1、時間重疊;
引入時間因素,是讓多個處理過程在時間上相互錯開,輪流使用同一套硬體設備的各個部分,以加快硬體周轉使用來贏得速度。

2、資源重復;
通過重復設置硬體資源來提高性能。

3、資源共享 ;
是用軟體方法讓多個用戶按一定時間順序輪流使用同一套資源,來提高其利用率,相應也就提高了系統的性能。

並發的實質是一個物理CPU(也可以多個物理CPU)在若幹道程序之間多路復用,並發性是對有限物理資源強制行駛多用戶共享以提高效率。
並行性是指計算機系統具有可以同時進行運算或操作的特性,在同一時間完成兩種或兩種以上工作。它包括同時性與並發性兩種含義。同時性指兩個或兩個以上事件在同一時刻發生。並發性指兩個或兩個以上事件在同一時間間隔發生。
實現並發技術的關鍵之一是如何對系統內的多個活動(進程)進行切換。

⑻ 請教高手們一個如何提高java線程並發性的問題

建議你使用asyncExec方法Socket使用Non-blockSocket(NIO)非阻塞試的連接。

SWT組件Diaplay提供syncExec與asyncExec方法,其原型為:syncExec(Runnablerunnable),asyncExec(Runnablerunnable),Runnable的run方法中可以封裝要執行的代碼,一般而言是UI相關的代碼,如更新組件顯示、刷新狀態等。Diaplay是和線程關聯的,其所在的線程一般稱謂UI線程,可以有多個UI線程,每個UI線程一個Diaplay。所有的SWT組件相關代碼,必須在UI線程之中執行。

syncExec與asyncExec相同點,都是為了讓Runnable封裝的代碼在指定的Diaplay(比如某個產成Image的diaplay)相關的UI線程中執行。如:imgCreateDiaplay.asyncExec(runnable)。需要說明的是,當前線程一般是非UI線程,也可以是UI線程(如其它UI相關線程如awtUI線程,和為提高執行效率,多個SWTUI線程之間協作並發執行,甚至調用線程和執行runnable的UI線程是同一個線程)

syncExec與asyncExec不相同點體現在對方法調用線程本身的影響,syncExec阻塞當前線程直到UI線程完成runnable中的代碼執行;而asyncExec則直接返回,不等待runnable中代碼被執行,但並不是說asyncExec執行的代碼一定不在同一個線程中,有些時候是同一個線程,只不過將代碼的執行根據需要分成兩個部分或多個部分處理。

兩者的異同決定了其分別適應不同的場合,一般syncExec適合在需要同步UI更新之後繼續執行的代碼,asyncExec適合在不便、不能syuncExec的情況下使用。

syncExec適用情況比較簡單,以下總結asyncExec的適用情況。

1、非UI線程需要調用在UI線程中調用的組件方法。非UI線程是相對與UI線程來講的,UI線程准確的講是diaplay變數所在的線程,因此非UI線程其實是非display所在的線程,其可以是任何其它線程,如UI無關的後台作業處理線程、SWT-AWT共用應用中的awt所在線程、其它display線程(這種情況比較少,一般應用於服務程序,如大量生成圖片的多UI線程,相互之間協調時的調用,如幾個UI線程負責地圖圖片的繪制,然後交給另外一個UI線程做裝飾處理);

2、跳出當前UI事件處理,安排後續事件。當前display所在的UI線程,在事件處理過程中,需要在執行完畢之後啟動另外一個UI處理過程,可以使用asyncExec,發起另外一個UI線程處理,結束當前的UI處理。有幾種情況下需要這么做:A、當前事件處理必須執行完畢,使應用到達一定的狀態之後,做另外的UI處理,但是由於SWT、JFace或其它應用框架的存在,當前事件處理完成之後需要應用框架執行一些其它代碼之後才可以執行另外的UI處理,否則會導致狀態不一致,界面出錯。但是當前事件處理完畢之後,不會出現其它事件來觸發需要另外執行的代碼,此時可以使用asyncExec,在框架的事件處理序列中插入另外一個事件,在當前事件處理完畢之後的某個時刻(一般很快)來執行;B、定時刷新或其它不是很重要的UI操作,通過asyncExec執行,不影響重要的UI事件處理。asyncExec所在的事件隊列優先順序較低。

3、事件比較密集,而且不均衡,有時非常密集,有時不太密集,為了將事件處理均衡處理,使UI線程始終能夠應付自如,而不是延遲重要事件的處理、使用戶感到界面遲鈍現象,將不重要的事件放到低優先順序序列中,從而保證用戶響應性,界面整體的有效性。

asyncExec使用時需要注意的問題主要在於兩個方面。
1、響應及時性。可以認為SWT存在兩個事件隊列,正常UI事件隊列,需非同步處理的隊列,該隊列優先順序較低,asyncExec對應於SWT低優先順序隊列,因此有可能在正常隊列事件較多、事件處理較慢的時候,asyncExec相關代碼不能及時執行的問題,從而導致響應不夠及時;
2、多線程同步問題。假如某段事件處理代碼發出多個asyncExec請求,每個asyncExec代碼訪問同一個變數,假設該變數是整數,第一次發出請求是值為1、第二次為2、第三次為3,所有請求發出,該事件處理完畢時,整數值為5,隨後第一次發出的asyncExec請求執行,訪問整數變數,此時為5,而本應該是1,其它幾個有類似問題。

當然了,Display也提供了timerExec,可以將其理解為Timer和asyncExec兩者的結合,代碼在指定時間之後非同步執行。

⑼ 如何提高自己的多任務並行處理能力

大腦不處理多任務,而是看多任務每項任務的難度,以及大腦的熟練程度和消耗的注意力。


在已有研究的基礎上,當腦加工任務是兩個獨立的系統的基礎上:一是有意識的、理性的、需要分析的、加工邏輯的、有記憶的、有歷史的、有時間線知覺的、串列處理的、同時只能處理一件事情。另一部分是無意識的、直覺的、感性的、瞬時的反應,只負責處理當前事件,不進行記錄的、並行處理的,並且可以同時處理多件事情。

直覺系統有時會立即搶占注意力來打斷現有的理性任務,比如走過一輛汽車突然沖過你,你會立即停下來,停下來吃東西,手中的通話並有理性系統來處理躲閃方向這個威脅生命的重大任務。

至於多任務的難度,就是你的大腦對於不同任務的熟練程度,如果你經常要躲避對面過來的車,那你肯定可以邊吃邊躲。例如,棒球運動員可以經常趕上棒球,甚至可以在注意力完全不在棒球上時立刻接住,這就是一個理性系統需要處理轉換成的一個直覺系統的任務。

閱讀全文

與如何提高軟體並發性任務相關的資料

熱點內容
電腦上怎麼下載班智達的軟體 瀏覽:1159
無痕跡消除圖片軟體 瀏覽:722
免費小票軟體 瀏覽:956
華為在哪裡設置軟體停止運行 瀏覽:962
用電腦鍵盤調節聲音大小 瀏覽:1261
自動刷軟體賺錢 瀏覽:1263
古裝連續劇免費版 瀏覽:1417
工免費漫畫 瀏覽:1149
手機軟體專門儲存文件 瀏覽:1511
uos如何用命令安裝軟體 瀏覽:1318
有線耳機插電腦麥克風 瀏覽:649
侏羅紀世界3在線觀看完整免費 瀏覽:997
單個軟體怎麼設置名稱 瀏覽:722
鳳凰網電腦版下載視頻怎麼下載視頻怎麼下載 瀏覽:1388
明白之後如何免費獲得無人機 瀏覽:833
如何解禁軟體菜單 瀏覽:855
副路由器連接電腦視頻 瀏覽:1352
內置wifi電視如何裝軟體 瀏覽:1109
手機換零免費雪碧 瀏覽:1590
國行蘋果如何下載美版軟體 瀏覽:1217