1. 程式人生 > 程式設計 >php實現ffmpeg處理視訊的實踐

php實現ffmpeg處理視訊的實踐

1.知識回顧

  • 計算機又叫電腦,即通電的大腦,發明計算機是為了讓他通電之後能夠像人一樣去工作,並且它比人的工作效率更高,因為可以24小時不間斷

  • 計算機五大組成部分

    • 控制器
    • 運算器
    • 儲存器
    • 輸入裝置
    • 輸出裝置

    計算機的核心真正幹活的是CPU(控制器+運算器=中央處理器)

  • 程式要想被計算機執行,它的程式碼必須要先由硬碟讀到記憶體,之後cpu取指令再執行

2.什麼是作業系統

精簡的說的話,作業系統就是一個協調、管理和控制計算機硬體資源和軟體資源的控制程式

作業系統位於計算機硬體與應用軟體之間,本質也是一個軟體。作業系統由作業系統的核心(運行於核心態,管理硬體資源)以及系統呼叫(運行於使用者態,為應用程式設計師寫的應用程式提供系統呼叫介面)兩部分組成,所以,單純的說作業系統是運行於核心態的,是不準確的。

3.為什麼要有作業系統

現代的計算機系統主要是由一個或者多個處理器,主存,硬碟,鍵盤,滑鼠,顯示器,印表機,網路介面及其他輸入輸出裝置組成。

一般而言,現代計算機系統是一個複雜的系統。

其一:如果每位應用程式設計師都必須掌握該系統所有的細節,那就不可能再編寫程式碼了(嚴重影響了程式設計師的開發效率:全部掌握這些細節可能需要一萬年....)

其二:並且管理這些部件並加以優化使用,是一件極富挑戰性的工作,於是,計算安裝了一層軟體(系統軟體),稱為作業系統。它的任務就是為使用者程式提供一個更好、更簡單、更清晰的計算機模型,並管理剛才提到的所有裝置。

總結:

程式設計師無法把所有的硬體操作細節都瞭解到,管理這些硬體並且加以優化使用是非常繁瑣的工作,這個繁瑣的工作就是作業系統來乾的,有了他,程式設計師就從這些繁瑣的工作中解脫了出來,只需要考慮自己的應用軟體的編寫就可以了,應用軟體直接使用作業系統提供的功能來間接使用硬體。

4.作業系統的功能

#一:隱藏了醜陋的硬體呼叫介面,為應用程式設計師提供呼叫硬體資源的更好,更簡單,更清晰的模型(系統呼叫介面)。應用程式設計師有了這些介面後,就不用再考慮操作硬體的細節,專心開發自己的應用程式即可。
例如:作業系統提供了檔案這個抽象概念,對檔案的操作就是對磁碟的操作,有了檔案我們無需再去考慮關於磁碟的讀寫控制(比如控制磁碟轉動,移動磁頭讀寫資料等細節),

#二:將應用程式對硬體資源的競態請求變得有序化
例如:很多應用軟體其實是共享一套計算機硬體,比方說有可能有三個應用程式同時需要申請印表機來輸出內容,那麼a程式競爭到了印表機資源就列印,然後可能是b競爭到印表機資源,也可能是c,這就導致了無序,印表機可能列印一段a的內容然後又去列印c...,作業系統的一個功能就是將這種無序變得有序。

補充 : 作業系統和普通軟體的區別

1.作業系統受硬體保護 , 不能修改
2.作業系統是一個大型、複雜、長壽的軟體 , linux或windows的原始碼有五百萬行數量級

5.作業系統發展史

所有的發展都是朝著一個目標進行的---->提高cpu的工作效率

5.1第一代計算機--真空管和穿孔卡片

1946年第一臺計算機誕生--20世紀50年代中期,計算機工作還在採用手工操作方式。此時還沒有作業系統的概念

程式設計師將對應於程式和資料的已穿孔的紙帶(或卡片)裝入輸入機,然後啟動輸入機把程式和資料輸入計算機記憶體,接著通過控制檯開關啟動程式針對資料執行;計算完畢,印表機輸出計算結果;使用者取走結果並卸下紙帶(或卡片)後,才讓下一個使用者上機

優缺點 :
使用者獨佔全機。不會出現因資源已被其他使用者佔用而等待的現象,但資源的利用率低。
CPU 等待手工操作 , CPU真正工作的時間非常短 , 利用率非常低

5.2第二代計算機--電晶體和批處理

由於當時的計算機非常昂貴,自認很自然的想辦法較少機時的浪費。通常採用的方法就是批處理系統

批處理系統:載入在計算機上的一個系統軟體,在它的控制下,計算機能夠自動地、成批地處理一個或多個使用者的作業(這作業包括程式、資料和命令)節約了使用者之間切換使用計算機的時間 , 大白話就是攢一堆然後統一處理

有了作業系統的概念

第二代如何解決第一代的問題/缺點

1.把一堆人的輸入攢成一大波輸入
2.然後順序計算(這是有問題的,但是第二代計算也沒有解決) 
3.把一堆人的輸出攢成一大波輸出

優缺點

優點:批處理,節省了機時
缺點: 1.整個流程需要人蔘與控制,將磁帶搬來搬去(中間倆小人)
2.計算的過程仍然是順序計算-》序列
3.程式設計師原來獨享一段時間的計算機,現在必須被統一規劃到一批作業中,等待結果和重新除錯的過程都需要等同批次的其他程式都運作完才可以(這極大的影響了程式的開發效率,無法及時除錯程式)

5.3.第三代計算機--積體電路晶片和多道技術

所謂多道程式設計技術,就是指允許多個程式同時進入記憶體並執行。即同時把多個程式放入記憶體,並允許它們交替在CPU中執行,它們共享系統中的各種硬、軟體資源。當一道程式因I/O請求而暫停執行時,CPU便立即轉去執行另一道程式。

空間上的複用:將記憶體分為幾部分,每個部分放入一個程式,這樣,同一時間記憶體中就有了多道程式。

時間上的複用:當一個程式在等待I/O時,另一個程式可以使用cpu,如果記憶體中可以同時存放足夠多的作業,則cpu的利用率可以接近100%,類似於我們小學數學所學的統籌方法。(作業系統採用了多道技術後,可以控制程序的切換,或者說程序之間去爭搶cpu的執行許可權。這種切換不僅會在一個程序遇到io時進行,一個程序佔用cpu時間過長也會切換,或者說被作業系統奪走cpu的執行許可權)

將A、B兩道程式同時存放在記憶體中,它們在系統的控制下,可相互穿插、交替地在CPU上執行:當A程式因請求I/O操作而放棄CPU時,B程式就可佔用CPU執行,這樣 CPU不再空閒,而正進行A I/O操作的I/O裝置也不空閒,顯然,CPU和I/O裝置都處於“忙”狀態,大大提高了資源的利用率,從而也提高了系統的效率,A、B全部完成所需時間<<T1+T2。

多道程式設計技術不僅使CPU得到充分利用,同時改善I/O裝置和記憶體的利用率,從而提高了整個系統的資源利用率和系統吞吐量(單位時間內處理作業(程式)的個數),最終提高了整個系統的效率。

切換+儲存狀態

切換(CPU)分為兩種情況
1.當一個程式遇到Io操作的時候,作業系統會剝奪該程式的cPU執行許可權
作用:提高了CPU的利用率並且也不影響程式的執行效率

2.當一個程式長時間佔用CPU的時候,操作吸引也會剝奪該程式的CPU執行許可權
作用:降低了程式的執行效率(原本時間+切換時間

第三代計算機的作業系統仍然是批處理

許多程式設計師懷念第一代獨享的計算機,可以即時除錯自己的程式。為了滿足程式設計師們很快可以得到響應,

出現了分時作業系統

遇到io切換cpu時間片到了切換cpu

5.4第四代計算機--個人計算機

PS:即使可以利用的cpu只有一個(早期的計算機確實如此),也能保證支援(偽)併發的能力。將一個單獨的cpu變成多個虛擬的cpu(多道技術:時間多路複用和空間多路複用+硬體上支援隔離),沒有程序的抽象,現代計算機將不復存在。

6.總結

#一 作業系統的作用:    1:隱藏醜陋複雜的硬體介面,提供良好的抽象介面    2:管理、排程程序,並且將多個程序對硬體的競爭變得有序#二 多道技術:    1.產生背景:針對單核,實現併發    ps:    現在的主機一般是多核,那麼每個核都會利用多道技術    有4個cpu,運行於cpu1的某個程式遇到io阻塞,會等到io結束再重新排程,會被排程到4個    cpu中的任意一個,具體由作業系統排程演算法決定。    2.空間上的複用:如記憶體中同時有多道程式    3.時間上的複用:複用一個cpu的時間片       強調:遇到io切,佔用cpu時間過長也切,核心在於切之前將程序的狀態儲存下來,這樣            才能保證下次切換回來時,能基於上次切走的位置繼續執行