c语言线程面试题,java多线程面试题 PDF 下载
主要內容:
基礎知識
并發編程的優缺點
為什么要使用并發編程(并發編程的優點)
充分利用多核CPU的計算能力:通過并發編程的形式可以將多核CPU的計算能力發揮到極致,性能得到提升
方便進行業務拆分,提升系統并發能力和性能:在特殊的業務場景下,先天的就適合于并發編程。現在的系統動不動就要求百萬級甚至千萬級的并發量,而多線程并發編程正是開發高并發系統的基礎,利用好多線程機制可以大大提高系統整體的并發能力以及性能。面對復雜業務模型,并行程序會比串行程序更適應業務需求,而并發編程更能吻合這種業務拆分 。
并發編程有什么缺點
并發編程的目的就是為了能提高程序的執行效率,提高程序運行速度,但是并發編程并不總是能提高程序運行速度的,而且并發編程可能會遇到很多問題,比如**:內存泄漏、上下文切換、線程安全、死鎖**等問題。
并發編程三要素是什么?在 Java 程序中怎么保證多線程的運行安全?
并發編程三要素(線程的安全性問題體現在):
原子性:原子,即一個不可再被分割的顆粒。原子性指的是一個或多個操作要么全部執行成功要么全部執行失敗。
可見性:一個線程對共享變量的修改,另一個線程能夠立刻看到。(synchronized,volatile)
有序性:程序執行的順序按照代碼的先后順序執行。(處理器可能會對指令進行重排序)
出現線程安全問題的原因:
線程切換帶來的原子性問題
緩存導致的可見性問題
編譯優化帶來的有序性問題
解決辦法:
JDK Atomic開頭的原子類、synchronized、LOCK,可以解決原子性問題
synchronized、volatile、LOCK,可以解決可見性問題
Happens-Before 規則可以解決有序性問題
并行和并發有什么區別?
并發:多個任務在同一個 CPU 核上,按細分的時間片輪流(交替)執行,從邏輯上來看那些任務是同時執行。
并行:單位時間內,多個處理器或多核處理器同時處理多個任務,是真正意義上的“同時進行”。
串行:有n個任務,由一個線程按順序執行。由于任務、方法都在一個線程執行所以不存在線程不安全情況,也就不存在臨界區的問題。
做一個形象的比喻:
并發 = 兩個隊列和一臺咖啡機。
并行 = 兩個隊列和兩臺咖啡機。
串行 = 一個隊列和一臺咖啡機。
什么是多線程,多線程的優劣?
多線程:多線程是指程序中包含多個執行流,即在一個程序中可以同時運行多個不同的線程來執行不同的任務。
多線程的好處:
可以提高 CPU 的利用率。在多線程程序中,一個線程必須等待的時候,CPU 可以運行其它的線程而不是等待,這樣就大大提高了程序的效率。也就是說允許單個程序創建多個并行執行的線程來完成各自的任務。
多線程的劣勢:
線程也是程序,所以線程需要占用內存,線程越多占用內存也越多;
多線程需要協調和管理,所以需要 CPU 時間跟蹤線程;
線程之間對共享資源的訪問會相互影響,必須解決競用共享資源的問題。
線程和進程區別
什么是線程和進程?
進程
一個在內存中運行的應用程序。每個進程都有自己獨立的一塊內存空間,一個進程可以有多個線程,比如在Windows系統中,一個運行的xx.exe就是一個進程。
線程
進程中的一個執行任務(控制單元),負責當前進程中程序的執行。一個進程至少有一個線程,一個進程可以運行多個線程,多個線程可共享數據。
進程與線程的區別
線程具有許多傳統進程所具有的特征,故又稱為輕型進程(Light—Weight Process)或進程元;而把傳統的進程稱為重型進程(Heavy—Weight Process),它相當于只有一個線程的任務。在引入了線程的操作系統中,通常一個進程都有若干個線程,至少包含一個線程。
根本區別:進程是操作系統資源分配的基本單位,而線程是處理器任務調度和執行的基本單位
資源開銷:每個進程都有獨立的代碼和數據空間(程序上下文),程序之間的切換會有較大的開銷;線程可以看做輕量級的進程,同一類線程共享代碼和數據空間,每個線程都有自己獨立的運行棧和程序計數器(PC),線程之間切換的開銷小。
包含關系:如果一個進程內有多個線程,則執行過程不是一條線的,而是多條線(線程)共同完成的;線程是進程的一部分,所以線程也被稱為輕權進程或者輕量級進程。
內存分配:同一進程的線程共享本進程的地址空間和資源,而進程之間的地址空間和資源是相互獨立的
影響關系:一個進程崩潰后,在保護模式下不會對其他進程產生影響,但是一個線程崩潰整個進程都死掉。所以多進程要比多線程健壯。
執行過程:每個獨立的進程有程序運行的入口、順序執行序列和程序出口。但是線程不能獨立執行,必須依存在應用程序中,由應用程序提供多個線程執行控制,兩者均可并發執行
總結
以上是生活随笔為你收集整理的c语言线程面试题,java多线程面试题 PDF 下载的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 全国计算机二级考试c语言指针,全国计算机
- 下一篇: 三轴联动c语言算法,(数控加工)虚拟轴数