線程異步和發(fā)布訂閱怎么選 如何理解java中的并發(fā)編程與多線程?
如何理解java中的并發(fā)編程與多線程?【并發(fā)】比如你開了一家最多能同時容納50人的餐廳,今天生意不錯,一個同事有100個客人,這就是并發(fā)。技術(shù)上怎么做?最簡單的想法是 "排隊(duì) ",隊(duì)列技術(shù),然后分布式
如何理解java中的并發(fā)編程與多線程?
【并發(fā)】比如你開了一家最多能同時容納50人的餐廳,今天生意不錯,一個同事有100個客人,這就是并發(fā)。技術(shù)上怎么做?最簡單的想法是 "排隊(duì) ",隊(duì)列技術(shù),然后分布式部署,分流請求,可以理解為開分支。
【多線程】也是餐廳??腿它c(diǎn)了五道菜,一個普通廚師只能同時做一道菜,但有經(jīng)驗(yàn)的廚師可以同時煲湯和炒菜。這就是多線程。技術(shù)上怎么做?最簡單的就是實(shí)現(xiàn)線程,自己動手。
并發(fā):在運(yùn)行開始和結(jié)束的同一時間段內(nèi)有幾個程序,并且這些程序都運(yùn)行在同一個處理器上,并發(fā)的兩種關(guān)系是同步和互斥;
互斥:訪問關(guān)鍵資源時進(jìn)程之間的互斥;
同步:流程之間存在依賴關(guān)系,一個流程的輸出作為另一個流程的輸入。一組具有同步關(guān)系的并發(fā)進(jìn)程之間發(fā)送的信息稱為消息或事件;
并行性:單個處理器中的進(jìn)程交替執(zhí)行,表現(xiàn)出并發(fā)的外部特征;在多處理器中,進(jìn)程可以交替和重疊執(zhí)行,從而實(shí)現(xiàn)并行處理。并行是指同事發(fā)生的多個并發(fā)事件,有并發(fā)的意思,但并發(fā)不一定是并行的,也就是說事件不一定要同時發(fā)生;
多線程:多線程是在進(jìn)程中并發(fā)運(yùn)行的一段代碼,可以實(shí)現(xiàn)線程之間的切換執(zhí)行;
異步:與同步相反,同步是順序執(zhí)行的,而異步是相互獨(dú)立的。在等待一個事件的時候繼續(xù)做你自己的事,不要。;不要等到這件事完成后再開始工作。線程是實(shí)現(xiàn)異步的一種,這意味著調(diào)用方法的主線程不需要同步等待另一個線程的完成,這樣主線程就可以做其他的事情了。
異步和多線程:不是同一個關(guān)系,異步是目的,多線程只是實(shí)現(xiàn)異步的一種手段,可以用多線程技術(shù)處理,也可以用其他進(jìn)程處理。
函數(shù)里的異步任務(wù)有哪些?
異步任務(wù)是那些被引擎擱置的任務(wù),它們不進(jìn)入主線程,而是進(jìn)入任務(wù)隊(duì)列。
只有當(dāng)引擎認(rèn)為某個異步任務(wù)可以執(zhí)行時(比如Ajax操作從服務(wù)器獲取結(jié)果),任務(wù)才會(以回調(diào)函數(shù)的形式)進(jìn)入主線程執(zhí)行。
異步任務(wù)背后的代碼將立即運(yùn)行,而不等待異步任務(wù)結(jié)束,也就是說,異步任務(wù)沒有 "阻塞和阻塞效果。
菜雞求問,c 里的epoll和java里的線程池到底怎么理解,優(yōu)劣如何?
服務(wù)器并發(fā)模型通??梢苑譃閱尉€程和多線程模型。這里的線程通常指的是 "I/O線程和,也就是 "管理思路與方法負(fù)責(zé)I/O操作和協(xié)調(diào)任務(wù)的分配,而實(shí)際的請求和任務(wù)通常由所謂的 "工作者線程 "。通常,在多線程模型下,每個線程既是I/O線程又是工作線程。所以我們;;we'我們現(xiàn)在談?wù)摰氖菃紊鞩/O thread多工作線程模型,這也是最常用的服務(wù)器并發(fā)模型。這個模型在我項(xiàng)目的服務(wù)器代碼中隨處可見。它還有一個名字叫 "半同步/半異步 "模型。同時,這種模式也是生產(chǎn)者/消費(fèi)者(尤其是多消費(fèi)者)模式的一種表現(xiàn)。
這種架構(gòu)主要基于I/O復(fù)用的思想(主要是epoll,select/poll已經(jīng)過時)。通過單線程I/O復(fù)用,可以實(shí)現(xiàn)高效并發(fā),同時避免多線程I/O來回切換的開銷,思路清晰,易于管理?;诰€程池的多工作線程可以充分發(fā)揮和利用多線程的優(yōu)勢,利用線程池進(jìn)一步提高資源重用性,避免線程過多。
Epoll是linux下高并發(fā)服務(wù)器的理想解決方案。因?yàn)槭鞘录|發(fā)的,所以不僅比select快一個數(shù)量級。
單線程epoll最多可以觸發(fā)15000個,但是加入服務(wù)后,因?yàn)榇蟛糠址?wù)處理的是數(shù)據(jù)庫,會出現(xiàn)擁塞。這時候必須用多線程來加速。