線程相關概念及操作

【1】線程的概念
1.線程-->進程會得到一個內存地址,進程是資源分配的基本單位線程才是真正進程里處理數據與邏輯的東西進程---》被分配一定的資源線程---》利用進程資源處理數據與邏輯
【2】進程和線程關系:
  進程與進程之間是競爭關系,競爭內存空間和資源線程和線程之間,協作關系,共同完成某個任務
【3】進程和線程開銷問題
進程 > 線程
原因:一個進程相當于一個工作車間一個線程只是一個進程里的流水線線程只是在進程已經申請有的資源上進行的處理
【4】進程和線程的區別
1. 線程共享創建它的進程的地址空間; 進程具有自己的地址空間。
2.線程可以直接訪問其進程的數據段; 進程具有其父進程數據段的副本。
3.線程可以直接與所在進程中的其他線程通信; 進程必須使用進程間通信與同級進程進行通信。
4.新線程很容易創建; 新進程需要復制父進程。
5.線程可以對同一進程的線程行使相當大的控制權。 進程只能控制子進程。
"""
# 創建線程---->多線程和多進程只有在阻塞的時候才能到別的地方去運行
"""
【5】創建線程的方式
方式一:
引入模塊,直接創建
from threading import Thread
def work():...
if __name__ == '__main__':t1=Thread(target=work)t1.start()
方式二:
繼承Thread類,重寫run方法
繼承了之后我的 New_Thread類他實例化的對象就是一個線程
from threading import Thread
class New_Thread(Thread):
?def __init__(self):super().__init__()def run(self):print("我是線程")
if __name__ == '__main__':t=New_Thread()t.start()

【6】多線程共享數據,多進程之間的數據是隔離開的
通過例子不難發現,線程中的數據,進行修改,在其他線程中會變
但是進程中的數據卻不會
from multiprocessing import Process
from threading import Thread
num=10
def work():# 由于在局部修改全局的變量,要對局部的該變量進行等級提升global numprint(f"改變前num={num}")num+=1print(f"改變后num={num}")
def main():for i in range(4):# thread=Thread(target=work)# thread.start()# thread.join()process=Process(target=work)process.start()process.join()print(f"當前num={num}")
if __name__ == '__main__':main()
【7】線程的查看的pid與ppid與進程的區別
線程的pid是他所屬的進程,因為都是由同一個進程開的線程,所以他的pid是相同的,ppid相同由于是一個主進程開的進程里的線程
每個進程有每個進程的不一樣的pid,但又相同的ppid
?
def work(name):print(f"當前{name}的pid={os.getpid()}")print(f"當前{name}的ppid={os.getppid()}")
def main():for i in range(2):# th=Thread(target=work,args=(f'線程{i+1}',))# th.start()# th.join()"""當前線程1的pid=13532當前線程1的ppid=2792當前線程2的pid=13532當前線程2的ppid=2792當前主進程的pid=13532"""p=Process(target=work,args=(f'進程{i+1}',))p.start()p.join()"""當前進程1的pid=10412當前進程1的ppid=11060當前進程2的pid=16796當前進程2的ppid=11060當前主進程的pid=11060"""print(f"當前主進程的pid={os.getpid()}")
if __name__ == '__main__':main()
【8】線程服務器并發
服務端
import socket
from socket import SOL_SOCKET,SO_REUSEADDR
from threading import Thread
?
?
class Server():def __init__(self):self.server=socket.socket()self.server.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)self.server.bind(('127.0.0.1',8080))self.server.listen(5)@staticmethoddef work(sock):while True:data=sock.recv(1024)if data.decode()=='':breakprint(data.decode())sock.send(f"你好{data.decode()}".encode())def main(self):while True:sock,addr=self.server.accept()t=Thread(target=self.work,args=(sock,))t.start()#t.join()
if __name__ == '__main__':t=Server()t.main()
客戶端
import socket
client=socket.socket()
client.connect(('127.0.0.1',8080))
while True:msg=input("請輸入》》:")client.send(msg.encode())data=client.recv(1024)print(data.decode())
【9】守護線程
主線程結束運行后不會馬上結束,而是等待其他非守護子線程結束之后才會結束
守護子線程會跟著主線程一起死
例子
from threading import Thread
from multiprocessing import Process
import timedef foo():print(f' this is foo begin')time.sleep(1)print(f' this is foo end')def func():print(f' this is func begin')time.sleep(3)print(f' this is func end')def main():t1 = Thread(target=foo)t2 = Thread(target=func)t1.daemon = Truet1.start()t2.start()print(f' this is main')if __name__ == '__main__':main()#  this is foo begin#  this is func begin#  this is main#  this is foo end#  this is func end
【十】多進程和多線程之間比較
多進程--》適合計算密集型操作
多線程--》適合IO密集型操作

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

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

相關文章

【北京迅為】《i.MX8MM嵌入式Linux開發指南》-第一篇 嵌入式Linux入門篇-

i.MX8MM處理器采用了先進的14LPCFinFET工藝,提供更快的速度和更高的電源效率;四核Cortex-A53,單核Cortex-M4,多達五個內核 ,主頻高達1.8GHz,2G DDR4內存、8G EMMC存儲。千兆工業級以太網、MIPI-DSI、USB HOST、WIFI/BT…

BFS:邊權相同的最短路問題

一、邊權相同最短路問題簡介 二、迷宮中離入口最近的出口 . - 力扣&#xff08;LeetCode&#xff09; class Solution { public:const int dx[4]{1,-1,0,0};const int dy[4]{0,0,1,-1};int nearestExit(vector<vector<char>>& maze, vector<int>& e…

論文閱讀:Rethinking Interpretability in the Era of Large Language Models

Rethinking Interpretability in the Era of Large Language Models 《Rethinking Interpretability in the Era of Large Language Models》由Chandan Singh、Jeevana Priya Inala、Michel Galley、Rich Caruana和Jianfeng Gao撰寫&#xff0c;探討了在大型語言模型&#xff…

WVP后端項目文件結構

WVP&#xff08;Web Video Platform&#xff09;是一個基于GB28181-2016標準實現的網絡視頻平臺&#xff0c;負責實現核心信令與設備管理后臺部分&#xff0c;支持NAT穿透&#xff0c;支持海康、大華、宇視等品牌的IPC、NVR、DVR接入。支持國標級聯&#xff0c;支持rtsp/rtmp等…

使用C#進行MySQL刪改查操作

使用C#進行MySQL刪改查操作 1.前提準備2.C#中MySQL的向指定數據庫中增加數據3.C#中MySQL的向指定數據庫中修改數據4.C#中MySQL的向指定數據庫中刪除數據 1.前提準備 在MySQL官網上下載C#相關的dll&#xff0c;或者在Nuget包中搜索“MySql.Data”&#xff0c;進行下載。 2.C#中…

js函數擴展內容---多參數,函數屬性,字符串生成函數

1.多參數 在js中&#xff0c;Math.max()方法可以接受任意數量的參數&#xff0c; Math.max(1,2,3,4);//4 Math.max(1,2,3,4,5,6,7,8,9,10)//10 在max方法里面有一個rest參數&#xff0c;它接受了所有參數全部合成到了一個number數組里面&#xff0c; function rest(a,b,...a…

12 - matlab m_map地學繪圖工具基礎函數 - 在地圖上繪制矢量場m_vec函數和繪制風羽圖的m_windbarb函數

12 - matlab m_map地學繪圖工具基礎函數 - 在地圖上繪制矢量場函數m_vec和繪制風羽圖的函數m_windbarb 0. 引言1. 關于m_vec2. 關于m_windbarb3. 總結 0. 引言 本篇介紹下m_map中繪制矢量場的函數&#xff08;m_vec&#xff09;和地圖上繪制風羽圖的函數m_windbarb。 1. 關于m…

【python重復元素判定】

在Python中&#xff0c;判定一個序列&#xff08;如列表、元組等&#xff09;中是否存在重復元素&#xff0c;可以通過多種方法實現。這里列出幾種常用的方法&#xff1a; 1. 使用集合&#xff08;Set&#xff09; 集合是一個無序的、不包含重復元素的數據結構。將序列轉換為…

QT信號量與槽

文章目錄 概述用系統生成新增一個信號量和槽代碼方式信號量和槽的宏信號量和槽都用函數地址lamda表達式函數指針 槽和信號量函數信號量槽 小結 概述 這個內容是QT獨有的&#xff0c;寫的挺有意義的。之前寫過一篇QT slots的函數&#xff0c;思來想去&#xff0c;覺得不是那么有…

python-22-零基礎自學python-數據分析基礎 打開文件 讀取文件信息

學習內容&#xff1a;《python編程&#xff1a;從入門到實踐》第二版 知識點&#xff1a; 讀取文件 、逐行讀取文件信息等 練習內容&#xff1a; 練習10-1:Python學習筆記 在文本編輯器中新建一個文件&#xff0c;寫幾句話來總結一下你至此學到的Python知識&#xff0c;其中…

代碼隨想錄:貪心2-4

455.分發餅干 題目 假設你是一位很棒的家長&#xff0c;想要給你的孩子們一些小餅干。但是&#xff0c;每個孩子最多只能給一塊餅干。 對每個孩子 i&#xff0c;都有一個胃口值 g[i]&#xff0c;這是能讓孩子們滿足胃口的餅干的最小尺寸&#xff1b;并且每塊餅干 j&#xff…

考CISP,不要踩坑的幾點建議

當你立志要在信息安全領域闖出一片天&#xff0c;可能多少都會聽行內人說&#xff0c;搞本CISP。但這個認證究竟該怎么拿&#xff1f;需要培訓嗎&#xff1f;培訓又是怎么一回事&#xff1f;價格如何&#xff1f;還有&#xff0c;什么時候開始準備最好&#xff1f;這些問題可能…

C++ Lambda表達式第一篇, 閉合(Closuretype)

C Lambda表達式第一篇&#xff0c; 閉合Closuretype ClosureType::operator()(params)auto 模板參數類型顯式模板參數類型其他 ClosureType::operator ret(*)(params)() lambda 表達式是唯一的未命名&#xff0c;非聯合&#xff0c;非聚合類類型&#xff08;稱為閉包類型&#…

【實習問題記錄】Nodeclub本地部署

問題描述 在按照官方網站給出的教程一步一步操作以后發現出現以下報錯&#xff1a; 問題分析 顯示連接不上mongodb&#xff0c;分析報錯可能是因為版本不匹配導致的&#xff0c;查看安裝的mongodb版本發現是7.0.4&#xff0c;與目標版本不匹配&#xff0c;同時查看mongodb官…

我們所熟知的meme梗圖也可以用AI生成了,老外都玩壞了。

meme梗圖不知道大家看到過嘛&#xff1f;相信你們看見下面的圖你就會大叫“臥槽”&#xff0c;原來是這種圖&#xff0c;我以前經常狂刷不止&#xff0c;太有趣了。 其實meme是一個網絡流行語&#xff0c;可譯為模因。在大眾非學術范圍內也可翻譯為我們所熟知的“梗”。其中“表…

SDK環境的安裝(測試使用)

1、安裝 將文件解壓至目錄,我的目錄為:D:\Program Files\Android 解壓后如下: 下載鏈接如下: sdk下載 提取碼見文章最后: 2、配置環境 1、在環境變量中,選擇系統變量,點擊新建。 變量名:ANDROID_HOME 變量值:“你自己的android-sdk安裝路徑” (例如我的:D:\Pro…

CF1955C Inhabitant of the Deep Sea 題解

題目 模擬 首先想到模擬。 但是看到數據范圍&#xff0c;模擬不了。 #include<bits/stdc.h> #include<cstring> #include<queue> #include<set> #include<stack> #include<vector> #include<map> #define int long long #define …

如何在 Linux 中高亮顯示日志關鍵字

在 Linux 系統中&#xff0c;實時查看日志文件通常使用 tailf 命令&#xff0c;但 tailf 本身并不支持高亮顯示關鍵字功能。通過結合 grep、sed 等工具&#xff0c;我們可以實現日志關鍵字高亮。本文將介紹幾種高效的方法來實現這一目標。 方法一&#xff1a;使用 grep --color…

人機交互中有許多不滿足緊致性條件的地方

緊致性條件通常用于描述拓撲空間的性質。一個拓撲空間被稱為緊致的&#xff0c;如果它的任意開覆蓋都有有限子覆蓋。換句話說&#xff0c;對于任何開覆蓋&#xff0c;都可以從中選取有限個開集&#xff0c;它們的并仍然覆蓋整個空間。 滿足緊致性條件的方法通常包括以下幾種&am…

7月8日 四道經典單鏈表oj題

大家好呀&#xff0c;本博客目的在于記錄暑假學習打卡&#xff0c;后續會整理成一個專欄&#xff0c;主要打算在暑假學習完數據結構&#xff0c;因此會發一些相關的數據結構實現的博客和一些刷的題&#xff0c;個人學習使用&#xff0c;也希望大家多多支持&#xff0c;有不足之…