摘要:一個可能在很多人看來很扯淡的一個問題我會用多線程就好了,還管它有什么用在我看來,這個回答更扯淡。但是單核我們還是要應用多線程,就是為了防止阻塞。
一個可能在很多人看來很扯淡的一個問題:我會用多線程就好了,還管它有什么用?在我看來,這個回答更扯淡。所謂"知其然知其所以然","會用"只是"知其然","為什么用"才是"知其所以然",只有達到"知其然知其所以然"的程度才可以說是把一個知識點運用自如。OK,下面說說我對這個問題的看法:
1)發揮多核CPU的優勢
隨著工業的進步,現在的筆記本、臺式機乃至商用的應用服務器至少也都是雙核的,4核、8核甚至16核的也都不少見,如果是單線程的程序,那么在雙核CPU上就浪費了50%,在4核CPU上就浪費了75%。單核CPU上所謂的"多線程"那是假的多線程,同一時間處理器只會處理一段邏輯,只不過線程之間切換得比較快,看著像多個線程"同時"運行罷了。多核CPU上的多線程才是真正的多線程,它能讓你的多段邏輯同時工作,多線程,可以真正發揮出多核CPU的優勢來,達到充分利用CPU的目的。
2)防止阻塞
從程序運行效率的角度來看,單核CPU不但不會發揮出多線程的優勢,反而會因為在單核CPU上運行多線程導致線程上下文的切換,而降低程序整體的效率。但是單核CPU我們還是要應用多線程,就是為了防止阻塞。試想,如果單核CPU使用單線程,那么只要這個線程阻塞了,比方說遠程讀取某個數據吧,對端遲遲未返回又沒有設置超時時間,那么你的整個程序在數據返回回來之前就停止運行了。多線程可以防止這個問題,多條線程同時運行,哪怕一條線程的代碼執行讀取數據阻塞,也不會影響其它任務的執行。
3)便于建模
這是另外一個沒有這么明顯的優點了。假設有一個大的任務A,單線程編程,那么就要考慮很多,建立整個程序模型比較麻煩。但是如果把這個大的任務A分解成幾個小任務,任務B、任務C、任務D,分別建立程序模型,并通過多線程分別運行這幾個任務,那就簡單很多了。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/74491.html
摘要:其頁面如下那么我們是否可以通過來制作爬蟲來幫助我們實現自動下載這些電子書呢答案是筆者在空閑時間寫了一個爬蟲,主要利用函數和多線程來下載這些電子書。 ??近段時間,筆者發現一個神奇的網站:http://www.allitebooks.com/ ,該網站提供了大量免費的編程方面的電子書,是技術愛好者們的福音。其頁面如下: showImg(https://segmentfault.com/i...
摘要:讓你收獲滿滿碼個蛋從年月日推送第篇文章一年過去了已累積推文近篇文章,本文為年度精選,共計篇,按照類別整理便于讀者主題閱讀。本篇文章是今年的最后一篇技術文章,為了讓大家在家也能好好學習,特此花了幾個小時整理了這些文章。 showImg(https://segmentfault.com/img/remote/1460000013241596); 讓你收獲滿滿! 碼個蛋從2017年02月20...
線程池通過復用線程,避免線程頻繁創建和銷毀。Java的Executors工具類中,提供了5種類型線程池的創建方法,它們的特點和適用場景如下: 第1種是:固定大小線程池,特點是線程數固定,使用無界隊列,適用于任務數量不均勻的場景、對內存壓力不敏感,但系統負載比較敏感的場景; 第2種是:Cached線程池,特點是不限制線程數,適用于要求低延遲的短期任務場景; 第3種是:單線程線程池,也就是一個線程的固...
摘要:最終也是通過執行的。如果隊列已經滿了,則判斷是否達到了線程池設置的最大線程數,如果沒有達到,就創建新線程來執行任務。如果已經達到了最大線程數,則執行指定的拒絕策略。這里需要注意隊列的判斷與最大線程數判斷的順序,不要搞反。 我們向線程提交任務時可以使用Execute和Submit,區別就是Submit可以返回一個Future對象,通過Future對象可以了解任務執行情況,可以取消任務的執...
閱讀 2675·2023-04-25 15:15
閱讀 1316·2021-11-25 09:43
閱讀 1604·2021-11-23 09:51
閱讀 1079·2021-11-12 10:36
閱讀 2880·2021-11-11 16:55
閱讀 955·2021-11-08 13:18
閱讀 723·2021-10-28 09:31
閱讀 2048·2019-08-30 15:47