九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
多線程(Multi-threading)和并行程序(Parallel Programming)詳解

Multi-threading and Parallel Programming


多線程是一種廣泛的編程和執(zhí)行模型,該模型允許在一個進程的上下文中存在多個線程。這些線程中的每一個都可以并行運行,并且這些線程共享相似的地址空間。那么,讓我們從頭開始說。

什么是線程(thread)?

thread的執(zhí)行是可以由調(diào)度程序獨立管理的最小程序指令序列,調(diào)度程序通常是操作系統(tǒng)的一部分。大多數(shù)情況下,一個線程存在于進程中,而多個線程可以存在于單個進程中,因此是多線程的。


當計算機科學(xué)家看到Thread(線程)時就像化學(xué)家看到Atom(原子)一樣。

這些threads同時運行,并且共享資源。threads在操作系統(tǒng)的實現(xiàn)和進程在操作系統(tǒng)之間有所不同,但是在大多數(shù)情況下,線程是進程的組成部分。

什么是進程(process)?

進程是通常彼此獨立運行的程序的實例。例如,如果啟動Java程序,則操作系統(tǒng)會產(chǎn)生一個新程序,該程序process(進程)可與其他程序并行運行。在這些進程中,我們可以利用線程并發(fā)執(zhí)行代碼,因此我們可以充分利用CPU的可用內(nèi)核。


與線程不同,進程不會彼此共享資源。process(進程)是資源的單位,而thread(線程)是調(diào)度和執(zhí)行的單位。

線程池

創(chuàng)建一個全新的OS線程需要內(nèi)存分配和CPU指令,以便對其進行設(shè)置和銷毀。為了更好地處理線程的使用并避免創(chuàng)建新線程,操作系統(tǒng)或平臺考慮了一項Thread Pool(線程池)功能,該功能使應(yīng)用程序可以使用已經(jīng)存在的線程。

這是處理多個線程而不處理其創(chuàng)建或銷毀的更有效的方法。此外,操作系統(tǒng)知道何時未積極使用線程池中的線程,因此它們可以在線程迭代期間自動“跳過”它。

線程的描述性編程表示

我們將研究從JavaExecutors和Java中的兩個類實現(xiàn)的線程Runnable。

  • 執(zhí)行程序Executors是Java中的一類,抽象了大多數(shù)手動線程創(chuàng)建過程。它們能夠運行異步任務(wù),通??梢怨芾砭€程池,因此我們不必手動創(chuàng)建新線程。

該類Executors提供了方便的工廠方法來創(chuàng)建各種執(zhí)行程序服務(wù)。在下面的示例中,我們使用大小為1的線程池的執(zhí)行程序。


結(jié)果看起來類似于上面的示例,但是在運行代碼時,您會注意到一個重要的區(qū)別,java進程永不停止!Executors必須明確停止-否則他們會繼續(xù)聽新任務(wù)。

ExecutorService提供了兩種方法用于此目的:shutdown()等待當前正在運行的任務(wù)完成,同時shutdownNow()中斷所有正在運行的任務(wù),并立即關(guān)閉執(zhí)行程序。此服務(wù)通常在使用套接字連接時使用,以促進異步調(diào)用(Sink-Source連接)。

  • 可運行的 Runnable是定義單個空隙無參數(shù)方法功能接口run()。在開始新線程之前,您必須指定此線程要執(zhí)行的代碼,通常稱為任務(wù),這是通過實現(xiàn)來完成的Runnable。請注意,您可以擁有盡可能多的任務(wù)。

    對于上面的示例,我們利用Java 8 lambda表達式將當前線程名稱打印到控制臺。首先,我們在開始新線程之前直接在主線程上執(zhí)行runnable。請參見下面的示例輸出。
Hello main
Hello Thread-0
Done!

或者這樣:

Hello main
Done!
Hello Thread-0

我們有兩個可能的輸出,因為由于并發(fā)執(zhí)行,我們無法預(yù)測在打印之前還是之后將調(diào)用runnable。該順序是不確定的,因此使得并發(fā)編程在大型應(yīng)用程序中成為一項復(fù)雜的任務(wù)。盡管線程也可以處于一定的睡眠時間。

深入多線程

就像我們前面已經(jīng)明確指出的那樣,一個multi-threaded(多線程)程序包含兩個或多個可以同時運行的部分,并且每個部分可以同時處理不同的任務(wù),特別是在計算機具有多個CPU時,可以最佳利用可用資源。


Multi-threading(多線程)將多任務(wù)處理的概念擴展到了應(yīng)用程序中,您可以在其中將單個應(yīng)用程序中的特定操作細分為各個線程。它使您可以編寫一種方式,使多個活動可以在同一程序中同時進行。

有幾種編程語言可以為騰出空間multi-threading,并且大多數(shù)語言是面向?qū)ο蟮木幊陶Z言(OOP)。語言,如JavaCC++甚至.NET框架。其他一些解釋型語言也有所作為,例如Ruby MRIforRubyCPythonfor Python。如果您等著看Javascript,那么您將不是因為JavaScript不支持多線程,而是因為JavaScript瀏覽器中的解釋器是一個單線程。

大量的多線程應(yīng)用程序

幾乎所有構(gòu)建良好的應(yīng)用程序都支持多線程。讓我們看一下瀏覽器。大多數(shù)瀏覽器都是多線程的,從firefoxSafariChrome還有許多其他。但是今天我們要詳細討論Chrome。

Google Chrome

Chrome具有多進程架構(gòu),并且每個進程都是高度多線程的。主要目標是使主線程(瀏覽器進程中的“ UI”線程)和IO線程(用于處理IPC的每個進程的線程)保持響應(yīng)。這意味著將任何阻塞的I / O或其他昂貴的操作卸載到其他線程。

Chrome中,您打開的每個選項卡都有其自己的內(nèi)容處理。五個標簽,5個進程,一百個標簽,100個進程。這種方法可最大程度地提高性能,但您會在內(nèi)存消耗和電池壽命方面付出沉重的代價。有沒有想過為什么任務(wù)管理器上的Chrome的CPU消耗總是很高?好吧,你去。

每個 chrome 進程都有

  • main thread 此線程更新UI并運行大多數(shù)Blink。
  • IO thread 此線程句柄的IPC和網(wǎng)絡(luò)請求
  • 還有一些special-purpose threads
  • 一池的general-purpose threads

Chrome與Firefox的比較

雖然Chrome會為每個選項卡創(chuàng)建一個內(nèi)容處理Firefox,但默認情況下最多旋轉(zhuǎn)四個內(nèi)容處理線程。在Firefox中,前4個標簽分別使用這4個進程,其他標簽則使用這些進程中的線程。一個進程中的多個選項卡共享內(nèi)存中已經(jīng)存在的瀏覽器引擎,而不是每個選項卡都創(chuàng)建自己的瀏覽器。

線程與進程

線程在許多方面與傳統(tǒng)的多任務(wù)處理過程不同:

  • 進程通常是獨立的,而線程作為進程的子集存在。
  • 進程比線程攜帶更多的狀態(tài)信息,而一個進程中的多個線程共享進程狀態(tài)以及內(nèi)存和其他資源。
  • 進程具有單獨的地址空間,而線程共享它們的地址空間。
  • 進程僅通過系統(tǒng)提供的進程間通信機制進行交互。
  • 同一進程中線程之間的上下文切換通常比進程之間的上下文切換發(fā)生得更快。

平行性

并行性與工作分散在多個單元中的概念有關(guān),以這種方式不會損害最終產(chǎn)品,但會減少總執(zhí)行時間。

并行執(zhí)行是兩個(或多個)任務(wù)同時運行的能力。雖然并發(fā)代表了可能性,但并行是現(xiàn)實。

總結(jié)

現(xiàn)在,多線程已成為現(xiàn)代軟件開發(fā)的重要組成部分。它受到許多編程語言和平臺的支持,并一直延伸到操作系統(tǒng)。知道如何使用多個線程可以肯定會導(dǎo)致開發(fā)人員構(gòu)建更好的應(yīng)用程序。

關(guān)注作者公眾號【海擁】回復(fù)【進群】,免費下載CSDN資源和百度文庫資源

后面我還會持續(xù)更新類似免費好玩的H5小游戲、Java小游戲、好玩、實用的項目和軟件等等

相關(guān)內(nèi)容

  • 用HTML實現(xiàn)簡單的下雪特效
  • 勇敢的兔子瘋狂奔跑小游戲
  • GitHub上廣受歡迎的下載神器:youtube-dl
  • youtube-dl安裝和實用方法
  • 基于Hexo和GitHub搭建自己的博客
  • java五子棋小游戲含免費源碼
  • 免費且好用的GIF錄制軟件LICEcap

最后,不要忘了?或📑支持一下哦

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
多線程編程
xml初始化函數(shù)和cleanleanup函數(shù)的使用。_混口飯的聚寶盆
Windows技術(shù)篇——進程、線程、消息機制進程間通信
JVM與多線程 zz
進程和線程的區(qū)別
03Python網(wǎng)絡(luò)編程之多線程服務(wù)端。
更多類似文章 >>
生活服務(wù)
熱點新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服