UNIX(多線程):01---線程簡介及線程限制

一、線程的概念

  • 典型的UNIX進程可以看成只有一個控制線程:一個進程在同一時刻只做一件事。有了多個控制線程后,在程序設計時可以把進程設計成在同一時刻能夠做不止一件事,每個線程處理各自獨立的任務

二、線程的優點

  • 通過為每種事件類型分配單獨的處理線程,可以簡化處理異步事件的代碼。每個線程在進行事件處理時可以采用同步編程模式,同步編程模式要比異步編程模式簡單得多

  • 同一進程多個線程可以自動的共享相同的存儲地址空間和文件描述符

  • 有些問題可以分解從而提高整個程序的吞吐量。在只有一個控制線程的情況下,一個單線程進程要完成多個任務,只需要把這些任務串行化。但是有多個控制線程時,相互獨立的任務的處理就可以交叉進行,此時只需要為每個任務分配一個單獨的線程。當然只有在兩個任務的處理過程相互不依賴的情況下,兩個任務才可以交叉執行

  • 交互的程序同樣可以通過多線程來改善響應事件,多線程可以把程序中處理用戶輸入輸出的部分與其他部分分開

三、線程的其它特點

  • 有些人把多線程的程序設計與處理器或多核系統聯系起來。但是即使程序運行在單處理器上,也能得到多線程編程模型的好處。處理器的數量并不影響程序結構,所以不管處理器的個數多少,程序都可以通過使用線程得以簡化。而且,即使多線程程序在串行化任務時不得不阻塞,由于某些線程在阻塞時還有另一些線程可以運行,所以多線程在單處理器上運行還是可以改善響應時間和吞吐量

  • 每個線程都含有表示執行環境所必須的信息:其中包括進程中標識線程的線程ID, 一組寄存器值、棧、調度優先級和策略

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/444297.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/444297.shtml
英文地址,請注明出處:http://en.pswp.cn/news/444297.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

UNIX(多線程):13---condition_variable、wait、notify_one、notify_all

條件變量std::condition_variable、wait()、notify_one() 線程A: 等待一個條件滿足線程B: 專門往消息隊列中放入消息(數據),達到一定條件,通知處于等待中的線程A。std::condition_variable實際上是一個類,是一個和條件相關的一個類,說白了就是等待一個條件達成。這個類是…

leetcode176. 第二高的薪水(SQL)

編寫一個 SQL 查詢,獲取 Employee 表中第二高的薪水(Salary) 。 ------------ | Id | Salary | ------------ | 1 | 100 | | 2 | 200 | | 3 | 300 | ------------ 例如上述 Employee 表,SQL查詢應該返回 200 作為第二…

UNIX(多線程):17---異步任務提供者(Provider) 介紹

std::promise 類概述 Promise 對象可以保存某一類型 T 的值,該值可被 future 對象讀取(可能在另外一個線程中),因此 promise 也提供了一種線程同步的手段。在 promise 對象構造時可以和一個共享狀態(通常是std::future)相關聯,并可以在相關聯的共享狀態(std::future)上保…

leetcode180. 連續出現的數字(SQL)

編寫一個 SQL 查詢,查找所有至少連續出現三次的數字。 --------- | Id | Num | --------- | 1 | 1 | | 2 | 1 | | 3 | 1 | | 4 | 2 | | 5 | 1 | | 6 | 2 | | 7 | 2 | --------- 例如,給定上面的 Logs 表, 1 是唯一連續…

UNIX(多線程):18---異步任務提供者(Provider) 介紹(續)

本文主要介紹 std::packaged_task。 std::packaged_task 包裝一個可調用的對象,并且允許異步獲取該可調用對象產生的結果,從包裝可調用對象意義上來講,std::packaged_task 與 std::function 類似,只不過 std::packaged_task 將其包裝的可調用對象的執行結果傳遞給一個 std:…

leetcode182. 查找重復的電子郵箱(SQL)

編寫一個 SQL 查詢,查找 Person 表中所有重復的電子郵箱。 示例: ------------- | Id | Email | ------------- | 1 | ab.com | | 2 | cd.com | | 3 | ab.com | ------------- 根據以上輸入,你的查詢應返回以下結果: ----…

UNIX(多線程):19---Future 類型詳解

Future 類型詳解 本文主要介紹 std::future,std::shared_future 以及 std::future_error,另外還會介紹 <future> 頭文件中的 std::async,std::future_category 函數以及相關枚舉類型。 std::future 詳解 std::future 概述 前面已經多次提到過 std::future,那么 std::…

UNIX(多線程):20---生產者消費者實例

本文將綜合運用 C++11 中的新的基礎設施(主要是多線程、鎖、條件變量)來闡述一個經典問題——生產者消費者模型,并給出完整的解決方案。 生產者消費者問題是多線程并發中一個非常經典的問題,相信學過操作系統課程的同學都清楚這個問題的根源。本文將就四種情況分析并介紹生產…

leetcode183. 從不訂購的客戶(SQL)

某網站包含兩個表&#xff0c;Customers 表和 Orders 表。編寫一個 SQL 查詢&#xff0c;找出所有從不訂購任何東西的客戶。 Customers 表&#xff1a; ----------- | Id | Name | ----------- | 1 | Joe | | 2 | Henry | | 3 | Sam | | 4 | Max | ----------- Or…

UNIX(多線程):21---線程池實現原理

線程池簡介: 線程過多會帶來調度開銷,進而影響緩存局部性和整體性能。 而線程池維護著多個線程,等待著監督管理者分配可并發執行的任務。這避免了在處理短時間任務時創建與銷毀線程的代價。線程池不僅能夠保證內核的充分利用,還能防止過分調度。可用線程數量應該取決于可用…

leetcode197. 上升的溫度(SQL)

給定一個 Weather 表&#xff0c;編寫一個 SQL 查詢&#xff0c;來查找與之前&#xff08;昨天的&#xff09;日期相比溫度更高的所有日期的 Id。 --------------------------------------------- | Id(INT) | RecordDate(DATE) | Temperature(INT) | -----------------------…

UNIX(多線程):22---幾種常見的線程池

常見線程池 1、newSingleThreadExecutor 創建一個單線程化的線程池,它只會用唯一的工作線程來執行任務,保證所有任務按照指定順序(FIFO, LIFO, 優先級)執行。 從構造方法來看,它可以單獨執行,也可以與周期線程池結合用。其任務隊列是LinkedBlockingQueue,這是個無界的阻塞…

js正則表達式限制文本框只能輸入數字,小數點,英文字母

1.文本框只能輸入數字代碼(小數點也不能輸入)<input οnkeyup"this.valuethis.value.replace(/\D/g,)" onafterpaste"this.valuethis.value.replace(/\D/g,)"> 2.只能輸入數字,能輸小數點. <input οnkeyup"if(isNaN(value))execCommand(und…

UNIX(多線程):23---線程池注意事項和常見問題

使用線程池的注意事項 死鎖任何多線程程序都有死鎖的風險,最簡單的情形是兩個線程AB,A持有鎖1,請求鎖2,B持有鎖2,請求鎖1。(這種情況在mysql的排他鎖也會出現,不會數據庫會直接報錯提示)。線程池中還有另一種死鎖:假設線程池中的所有工作線程都在執行各自任務時被阻塞…

leetcode 178. 分數排名(SQL)

編寫一個 SQL 查詢來實現分數排名。如果兩個分數相同&#xff0c;則兩個分數排名&#xff08;Rank&#xff09;相同。請注意&#xff0c;平分后的下一個名次應該是下一個連續的整數值。換句話說&#xff0c;名次之間不應該有“間隔”。 ----------- | Id | Score | ----------…

UNIX(多線程):24---哪些STL容器是線程安全的

在日常C++開發,少不了和STL,多線程打交道,那么在多線程下,哪些容器時線程安全的,那些不是? 好,這里就舉一個簡單的例子,我們先看看vector容器,相信你能看出一些問題: #include <iostream> #include <string> #include <algorithm> #inclu…

leetcode184. 部門工資最高的員工(SQL) 連接+嵌套查詢

Employee 表包含所有員工信息&#xff0c;每個員工有其對應的 Id, salary 和 department Id。 --------------------------------- | Id | Name | Salary | DepartmentId | --------------------------------- | 1 | Joe | 70000 | 1 | | 2 | Henry | 80000 …

UNIX(多線程):25---當前進程的線程哪些數據共享哪些是私有的

線程是進程的一個實體,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位.線程自己基本上不擁有系統資源,只擁有一點在運行中必不可少的資源(如程序計數器,一組寄存器和棧),但是它可與同屬一個進程的其他的線程共享進程所擁有的全部資源. 一個線程可以創建和…

UNIX(多線程):26---悲觀鎖和樂觀鎖

鎖(Lock):在介紹悲觀鎖和樂觀鎖之前,讓我們看一下鎖。鎖,在我們生活中隨處可見,我們的門上有鎖,我們存錢的保險柜上有鎖,是用來保護我們財產安全的。程序中也有鎖,當多個線程修改共享變量時,我們可以給修改操作上鎖(syncronized)。當多個用戶修改表中同一數據時,我…

leetcode511. 游戲玩法分析 I(SQL)

活動表 Activity&#xff1a; ----------------------- | Column Name | Type | ----------------------- | player_id | int | | device_id | int | | event_date | date | | games_played | int | ----------------------- 表的主鍵是 (player_i…