進程和線程的剖析

進程和線程的區別?什么時候用進程?什么時候用線程?

答:首先得知道什么是進程什么是線程?

我的理解是進程是指在系統中正在運行的一個應用程序;程序一旦運行就是進程,或者更專業化來說:進程是指程序執行時的一個實例。

線程是進程的一個實體。

進程——資源分配的最小單位,線程——程序執行的最小單位。

?

線程進程的區別體現在幾個方面:

第一:因為進程擁有獨立的堆棧空間和數據段,所以每當啟動一個新的進程必須分配給它獨立的地址空間,建立眾多的數據表來維護它的代碼段、堆棧段和數據段,這對于多進程來說十分“奢侈”,系統開銷比較大,而線程不一樣,線程擁有獨立的堆棧空間,但是共享數據段,它們彼此之間使用相同的地址空間,共享大部分數據,比進程更節儉,開銷比較小,切換速度也比進程快,效率高,但是正由于進程之間獨立的特點,使得進程安全性比較高,也因為進程有獨立的地址空間,一個進程崩潰后,在保護模式下不會對其它進程產生影響,而線程只是一個進程中的不同執行路徑。一個線程死掉就等于整個進程死掉。

第二:體現在通信機制上面,正因為進程之間互不干擾,相互獨立,進程的通信機制相對很復雜,譬如管道,信號,消息隊列,共享內存,套接字等通信機制,而線程由于共享數據段所以通信機制很方便。。

3.屬于同一個進程的所有線程共享該進程的所有資源,包括文件描述符。而不同過的進程相互獨立。

4.線程又稱為輕量級進程,進程有進程控制塊,線程有線程控制塊;

5.線程必定也只能屬于一個進程,而進程可以擁有多個線程而且至少擁有一個線程;

第四:體現在程序結構上,舉一個簡明易懂的列子:當我們使用進程的時候,我們不自主的使用if else嵌套來判斷pid,使得程序結構繁瑣,但是當我們使用線程的時候,基本上可以甩掉它,當然程序內部執行功能單元需要使用的時候還是要使用,所以線程對程序結構的改善有很大幫助。

?

?

進程與線程的選擇取決以下幾點:

1、需要頻繁創建銷毀的優先使用線程;因為對進程來說創建和銷毀一個進程代價是很大的。

2、線程的切換速度快,所以在需要大量計算,切換頻繁時用線程,還有耗時的操作使用線程可提高應用程序的響應

3、因為對CPU系統的效率使用上線程更占優,所以可能要發展到多機分布的用進程,多核分布用線程;

4、并行操作時使用線程,如C/S架構的服務器端并發線程響應用戶的請求;

5、需要更穩定安全時,適合選擇進程;需要速度時,選擇線程更好。

進程間通信

既然每個進程是占有獨立的地址空間且不能共享數據,那就需要有進程通信的方式,進程間通信(IPC)方式有以下幾種:

(1)共享內存,獨立的開辟一段內存空間,進程1往內存中寫數據,進程2從內存中讀數據,如果有其他進程,則另開辟內存空間即可。

(2)消息隊列:可以傳遞消息

(3)管道:可以用來傳遞消息,但是是單向的

(4)互斥器:用來進程同步和互斥

(5)信號量:用來進程同步和互斥

(6)信號:用來進程同步和互斥

?

線程間通信

因為同一個進程中的線程是共享地址空間的,可以共享數據,因此線程間的通信方式個人認為就是處理線程間的同步和互斥,常用線程間通信的方式有以下幾種:

(1)原子操作符集

(2)關鍵代碼段(Windows)

(3)互斥鎖

(4)信號量

(5)條件變量(Linux)

(6)讀寫鎖(Linux)

進程和線程不能進行直接通信。

操作:

https://www.cnblogs.com/microfan/p/5294250.html

轉載于:https://www.cnblogs.com/lgx-fighting/p/9372594.html

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

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

相關文章

解決 java.net.ConnectException: Connection refused: connect 異常

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 一、 我的情況很簡單: 只是因為我調用服務端接口方法包名沒有寫對,應該如下面代碼中這樣寫: call.…

主席樹的各類模板(區間第k大數【動,靜】,區間不同數的個數,區間=k的個數)...

取板粗 好東西來的 1.(HDOJ2665)http://acm.hdu.edu.cn/showproblem.php?pid2665 (POJ2104)http://poj.org/problem?id2104 (POJ2761)http://poj.org/problem?id2761 題意:求區間第K大&…

java類內部的變量

類內部的變量分為兩部分: 一.類的成員變量 在類內部,變量定義部分,定義的變量。 二.局部變量 在類內方法體中定義的變量和方法中涉及的變量。 成員變量和局部變量的區別: (1)成員變量在整個類中都有效…

騰訊搜搜退出PC搜索領域:百度搜狗迎來雙龍競爭

摘要:據北京商報報道,上周末,騰訊對公司組織架構進行了大規模調整。業內普遍認為,搜搜并入騰訊無線后,這個獨立搜索平臺將被合并,失去獨立性,也將令搜搜官網域名soso.com走向“沒落”。據北京商…

facade-pattern外觀模式

外觀模式: 外觀模式是面向對象編程中的重要設計模式。外觀類用來掩蓋復雜的內部邏輯,為用戶提供簡潔統一的服務接口。外觀類的主要功能如下: 1.通過提供簡明的對外API接口,來提高程序的可閱讀性和間接性。 2.提供通用的特定功能…

Web Service 客戶端,調用服務方法

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 只是最簡單的調用web service 服務,至于要傳什么參數全看到業務了。 以下是最簡單的調用方式 : package hdmp…

分享Spring Cloud分布式微服務架構圖

分布式、微服務、云架構JAVA語言開發、跨平臺、高性能、高可用、安全、服務化、模塊化、組件化、驅動式開發模式 從現在開始,我這邊會將近期研發的springcloud微服務云架構的搭建過程和精髓記錄下來,幫助更多有興趣研發spring cloud框架的朋友&#xff0…

返回一個list的全部 倒敘排列的方法

#反向迭代一個listlist[2,4,6,4,3,7,5,45,23,6,5,32,6,52,324,23,65,76,3,234,6,3,4,356,7,74,234,35,7,86]def funrev(list): list1[] for i in range(len(list)): list1.append(list[-i-1]) print(list1) return list1print(************************)lis…

互聯網手機潮進入PK時代:周鴻祎激戰小米雷軍

摘要:事實上,周鴻祎本人也多次強調,對于對手他一向實事求是,“對小米手機這種模式持肯定態度,它是第一個做互聯網手機的”。花費精力做出漂亮的銷售業績,這是互聯網手機最關鍵命題,配置戰、價格…

很多人問為什么使用聯合索引,為什么不建兩個單獨的索引呢?

So why not just create two indexes, one on last_name and one on first_name? You could do that, but MySQL won’t use them both at the same time. In fact, MySQL will only ever use one index per table per query—except for UNIONs.[3] This fact is important e…

oracle表被鎖了怎么處理

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 首先你要知道表鎖住了是不是正常鎖?因為任何DML語句都會對表加鎖。你要先查一下是那個會話那個sql鎖住了表,有可…

Lyft Level 5 Challenge 2018 - Elimination Round翻車記

打猝死場感覺非常作死。 A&#xff1a;判一下起點和終點是否在其兩側即可。 #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> using namespace std; int read() {int x0,…

mysql用戶的權限分配

2019獨角獸企業重金招聘Python工程師標準>>> 因今天在分配數據庫權限的時候&#xff0c;同事反映賬戶不能使用函數&#xff0c;遂搜集資料總結了一番關于mysql用戶的權限分配。 MySQL 賦予用戶權限命令的簡單格式可概括為&#xff1a; grant 權限 on 數據庫對象 to …

小米360口水戰背后:國產手機第三態誕生

摘要&#xff1a;按照雙方公布的配置信息&#xff0c;小米手機青春版為1.2G H z雙核處理器&#xff0c;華為閃耀為1G H z雙核。種向市場投入海量推廣資金&#xff0c;以換取產品上的高利潤&#xff0c;代表為步步高、金立、O PPO。南都制圖&#xff1a;宋小偉 互聯網入侵通信業…

java bean轉map

一.使用Apache提供的BeanUtils public Map test(Object person) {Map map BeanUtils.describe(person);return map; } 二.使用Jackson public Map test(Object person) {ObjectMapper objectMapper new ObjectMapper(); Map map objectMapper.convertValue(person, HashM…

java中ftp文件上傳和中文亂碼解決

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 前幾天 有個需求就是上傳文件的時候&#xff0c;本地存一份&#xff0c;其他服務器也保存一份&#xff0c;于是就研究了一下&#xff0c…

線段與多邊形的關系

轉自周見智 介紹 最近項目中要用到有關幾何&#xff08;Geometry&#xff09;方面的知識&#xff0c;程序需要判斷給定的一條線段&#xff08;Segment&#xff09;與指定多邊形&#xff08;Polygon&#xff09;的位置關系。這種關系分為三種&#xff1a;多邊形包含線段、多邊形…

shell的交互式和非交互式登錄

工作中經常碰見環境變量加載問題&#xff0c;歸根結底就是配置文件的加載問題。 一般會有四種模式&#xff1a;交互式登陸、非交互式登陸、交互式非登陸、非交互非登陸。 交互式和非交互式對環境變量的加載: -------------------------------------------------- | …

運營商取消話費余額有效期后改收閑置費

摘要&#xff1a;截至昨天&#xff0c;北京的CDMA預付費手機用戶均收到了中國電信北京公司的短信通知。5月初&#xff0c;中國聯通正式取消有月租或有月最低消費的預付費產品的話費有效期。而邱寶昌認為&#xff0c;防止倒號和號碼資源浪費本應是運營商的責任&#xff0c;現在運…

內存柵欄的影響

當我們在使用jvm鎖的時候&#xff0c;一方面是為了減少線程的競爭&#xff0c;另外還有一方面就是保證共享數據的及時可見性。為了保證線程共享變量的可見性&#xff0c;會使用到內存柵欄&#xff0c;jvm設置內存柵欄&#xff0c;并將共享數據及時刷新到主存中保證其他線程可以…