只有光頭才能變強使用多執行緒時,不是多執行緒能提公升程式的執行速度,使用多執行緒是為了更好地利用cpu資源!
程式在執行時,多執行緒是cpu通過給每個執行緒分配cpu時間片來實現的,時間片是cpu分配給每個執行緒執行的時間,因時間片非常短,所以cpu通過不停地切換執行緒執行。
執行緒不是越多就越好的,因為執行緒上下文切換是有效能損耗的,在使用多執行緒的同時需要考慮如何減少上下文切換
一般來說有以下幾條經驗
還可以考慮我們的應用是io密集型的還是cpu密集型的。
我來簡單總結一下為什麼有了mac(ip)還需要ip(mac):
已經有ip位址了,為什麼需要mac位址??
mac位址已經是唯一了,為什麼需要ip位址?
tcp 每個狀態說一下,time-wait狀態說一下tcp總共有11個狀態,狀態之間的轉換是這樣的:
流程圖:
下面我簡單總結一下每個狀態:
fin-wait-2:主動關閉端接到ack後,就進入了fin-wait-2。在這個狀態下,應用程式還有接受資料的能力,但是已經無法傳送資料。
last_ack:當被動關閉的一方在傳送fin報文後,等待對方的ack報文的時候,就處於last_ack 狀態
closed:當收到對方的ack報文後,也就可以進入到closed狀態了。
time_wait:表示收到了對方的fin報文,並傳送出了ack報文。time_wait狀態下的tcp連線會等待2*msl
closing:罕見的狀態。表示雙方都正在關閉socket連線
time_wait狀態一般用來處理以下兩個問題:
time_wait過多怎麼解決?如果在高併發,多短鏈結情景下,time_wait就會過多。
可以通過調整核心引數解決:vi /etc/sysctl.conf
加入以下內容設定:
我們可以知道time_wait狀態是主動關閉連線的一方出現的,我們不要輕易去使用上邊兩個引數。先看看是不是可以重用tcp連線來盡量避免這個問題(比如我們http的keepalive)~
tcp是乙個可靠的傳輸協議,它要保證所有的資料報都可以到達,這需要重傳機制來支撐。
重傳機制有以下幾種:
滑動視窗可以說是tcp非常重要的乙個知識點。tcp的滑動視窗主要有兩個作用:
簡略滑動視窗示意圖:
詳細滑動視窗示意圖:
接受端控制傳送端的圖示:
tcp不是乙個自私的協議,當擁塞發生的時候,要做自我犧牲。就像交通阻塞一樣,每個車都應該把路讓出來,而不要再去搶路了擁塞控制主要是四個演算法:
擁塞控制的作用:
擁塞的判斷:
強烈建議閱讀:
unix/linux環境下
殭屍程序:
孤兒程序:
殭屍程序危害:
解決殭屍程序的手段:
首先要知道的是:程序和執行緒的關注點是不一樣的:
作業系統程序間通訊的方式有哪些?
作業系統執行緒間通訊的方式有哪些?(可以直接理解成:執行緒之間同步的方式有哪些)執行緒間的通訊目的主要是用於執行緒同步。
擴充套件閱讀:
作業系統程序排程演算法有哪些?短程序/作業優先演算法(sjf)
最高響應比優先演算法(hrn)
最高優先數演算法
基於時間片的輪轉排程演算法
最短剩餘時間優先演算法
多級反饋排隊演算法
此部分是看別人的博文已經寫得很好了,分享給大家~
concurrenthashmap中的擴容是否需要對整個表上鎖?總結(摘抄)要點:
什麼是一致性hash演算法(原理)?總結(摘抄)要點:
mysql date、datetime和timestamp型別的區別總結(摘抄)要點:
判斷乙個鍊錶是否有環(實際上就是看看有無遍歷到重複的節點),解決方式(3種):
for遍歷兩次
使用hashset做快取,記錄已遍歷過的節點
使用兩個指標,一前一後遍歷,總會出現前指標==後指標
的情況
判斷兩個無環鏈表是否相交,解決方式(2種):
直接判斷兩個鍊錶的尾節點是否相等,如果相等則相交,否則不相交
判斷兩個有環鏈表是否相交(注:當乙個鍊錶中有環,乙個鍊錶中沒有環時,兩個鍊錶必不相交):
如果想看更多的文章的目錄導航(pc端):
海量精美腦圖:
Java 留下沒有基礎眼淚的面試題
只有光頭才能變強 使用多執行緒時,不是多執行緒能提公升程式的執行速度,使用多執行緒是為了更好地利用cpu資源!程式在執行時,多執行緒是cpu通過給每個執行緒分配cpu時間片來實現的,時間片是cpu分配給每個執行緒執行的時間,因時間片非常短,所以cpu通過不停地切換執行緒執行。執行緒不是越多就越好的,...
做研究,沒有基礎怎麼行
最近做了乙個多月的乙個高維資料庫空間索引方法,後來不斷查閱 才發現,這種方法,早前10年多以前,就已經有不少人做過,甚至改進了很多。而我現在自己的想法,和前人的是如此地接近,類似。於是乎,我之前做的工作,基本上可以說是白費了,只是重複走了一遍別人在10多年前就走過的道路而已。現在總結一下,為什麼這樣...
沒有基礎如何快速學習iOS 開發?
隨著蘋果各類應用開發越來越火爆,很多開發者都轉向ios方向的學習,但是如何快速的轉向這個方向,一直是很多人的困擾。特別總結了幾點,分享給大家。第二步 您需要有足夠的熱情,可以沒有基礎,但要有熱情,否則再簡單的東西也堅持不下來,不管是要做獨立開發者,還是打算藉此提公升自身技能,沒有長期的熱情,還是別學...