我們為何要使用多線程,它有什么優點?

其實在平時的開發中,很多程序員都不會去寫線程,為啥?因為麻煩,其次是用到的地方并不多,除非逼不得已,大家都不會去寫,畢竟寫一天代碼,拿一天工資,是吧?

麻煩歸麻煩,但是多線程的優點不得不說:

1. 資源利用率提升,程序處理效率提高

  打個比方:我們做上傳圖片的時候,在上傳成功后往往會進行圖片的處理,原圖保存后,會再生成一張小圖以作為一些應用的預覽圖,那么原圖的處理就需要程序去讀取再處理,假設讀取需要花費1秒,處理需要2秒,現在有3張大圖,所需要耗費的時間就是(1+2)X3=9秒,根據圖片的不同,那么單位時間會更多,總計時間就會更久。

那么如果把程序設計更好的話,那就是在讀取文件的時候同時處理上一個文件,這樣就可以盡可能的縮短時間,減少客戶端的響應,同時也提升了CPU的使用率。

如果還不能理解的話那就再舉個例子,我朋友公司是專為某銀行處理數據同步的問題,每天凌晨銀行那邊會有幾十萬條數據發送過來進行處理,項目本身就是個坑,幾百萬條數據接收后直接去處理了,每次運行大多都要耗費2.5個小時,時間實在太久,如果哪天有幾億數據是不是要跑幾十個小時了?那么就可以用多線程,切割這個數據,利用不同的線程來處理,最后把時間縮短到了半小時左右

?

2. 代碼會相對簡單

  如果利用單線程去處理文件,那么我們就得標記每次處理的各個節點的狀態;而如果使用多線程的話處理完一個扔一個,可以簡便不少

?

3.?軟件運行速度提升

  就像之前所說的魔獸爭霸那樣,如果采礦伐木打獵都是由一個農民工來做的話,那他會累死,而如果分配3個農民工來做的話,那么時間大大縮短;同理,軟件程序在處理文件的時候也是一個道理。

也就是說,往常我們監聽的是用戶請求,現在我們把用戶請求塞給線程,我們去監聽線程就可以了。

舉一個不恰當的例子,我們在用eclipse的時候經常會出現這樣的情況,一個progress被另一個卡住,下一個必須等待上一個執行完畢后再執行,完畢后我們方可編寫代碼,這種情況尤其出現在maven編譯或者下載jar包的時候。

假如說,eclipse是同時進行任務處理的,那么每個任務處理完后響應一個狀態,然后再提示給用戶,可以彈出顯示,或者在底部狀態來加個有顏色的提醒,都可以。(如果理解成消息隊列的處理方式也可以,在云計算業務中利用消息隊列處理各種服務器請求也是類似道理)

那么,這樣的程序設計對于軟件自身來說響應速度就更快了,用戶的體驗也就更高了~

?

?

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

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

相關文章

ecs服務器數據遷移_如何非常方便地從Windows文件服務器把數據完整地遷移到ONTAP Select...

這是一個續篇,如果你依然愛你的Windows文件服務器或者使用Windows文件服務沒有任何問題的話,請忽略我。續自:從Windows文件服務器,到ONTAP Select軟件定義存儲感謝聯想凌拓合作伙伴新銳英誠的幫助,我們成功地做到了從海…

yum第三方安裝-軟件包沒簽名及更新錯誤

yum安裝時 后面加 --nogpgcheck 阿里云源文件:http://mirrors.aliyun.com/repo/Centos-7.repo epel repo源:http://mirrors.aliyun.com/repo/epel-7.repo yum update 錯誤提示 Error: initscripts conflicts with centos-release-7-4.1708.el7.centos.x8…

oracle觸發和存儲過程,Oracle存儲過程與觸發器

Oracle存儲過程與觸發器存儲過程存儲過程最直接的理解:就是保存了批量的sql(select,insert,if for),以后可以通過一個名字把這些批量的sql執行,使用存儲過程在大批量數據查詢或計算時會帶來高性能,存儲過程編寫和調試比較復雜&…

(hdu 簡單題 128道)平方和與立方和(求一個區間的立方和和平方和)

題目:平方和與立方和Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 108212 Accepted Submission(s): 34915Problem Description給定一段連續的整數。求出他們中全部偶數的平方和以及全部奇數的立方…

企業高可用切換的說明

企業的應用場景,基本上都離不開高可用,不管是windows下自帶的集群軟件,或者是Linux下的heartbeat,keepalived等,AIX下的hacmp等。-----------------------------引用老男孩老師對高可用切換的說明--------------------…

swift int轉string_Swift集合類型協議淺析(下)

關注【搜狐技術產品】公眾號,第一時間獲取技術干貨導讀本篇是Swift集合類型協議淺析系列文章的下篇,在這篇文章中,我們將繼續圍繞集合類型協議展開討論,側重點更多地關注于String相關的周邊協議。StringProtocol代表一個字符串&am…

50 jQuery綁定事件 阻止默認事件發生 內置動畫 each data

主要內容 1 阻止后續事件繼續執行 return false: 常用于表單提交 event.preventDefault : 阻止默認事件發生 <body> <form action""><input type"text" id"t1"><input type"submit" class"s1" id&qu…

oracle視圖執行腳本,Sh腳本中查詢Oracle v$視圖時需要在$號前加轉義符“\”

DBA經常會部署一些sh腳本登陸Oracle數據庫查詢v$動態視圖得到一些東西來實際管理自動化的目的&#xff0c;但在sh腳本中寫ORACLE SQL語句時&#xff0c;如果語句查詢v$視圖&#xff0c;直接寫v$XXXX是不能成功的&#xff0c;shell會將$當成一個參數來處理。以下面一段簡單的sh腳…

Linux下實現視頻讀取(二)---camera參數設定

Camera的可設置項極多&#xff0c;V4L2 支持了不少。但Sam之前對這些設置的使用方法和涵義都是在看videodev2.h中邊看邊理解。感覺很生澀。直到寫這篇blog時&#xff0c;才發現v4l2有專門的SPEC來說明&#xff1a; http://www.linuxtv.org/downloads/legacy/video4linux/API/V4…

微信小程序頁面跳轉與返回并回傳數據

2019獨角獸企業重金招聘Python工程師標準>>> A頁面&#xff1a; .wxml文件 <view class"flex-wrp"><text style"width: 32%;">選擇城市</text><input style"width: 68%;" type"text" bindtap"ci…

地址欄 輸入 參數 刷新參數丟失_小米11 Pro屏幕參數曝光:2K屏幕+120Hz刷新率

本周一&#xff0c;高通已經宣布將于12月初舉行的驍龍技術峰會上正式發布新一代旗艦處理器——驍龍875。根據此前的曝光消息&#xff0c;小米11系列將首發搭載這顆芯片&#xff0c;網上也已經開始對這款新機進行曝光。日前&#xff0c;海外知名論壇XDA在MIUI 12的代碼中發現了一…

Cypress EZ-USB FX3 DMA模式下的串口通訊

由于公司設備升級后出了問題&#xff0c;需要對USB驅動進行修改&#xff0c;原本使用的是寄存器模式進行UART傳輸&#xff0c;但是由于FX3寄存器模式會出現長時間延時等待的問題&#xff0c;不得不對其傳輸模式進行修改。雖然賽普拉斯的EZ-USB FX3系列芯片功能強大&#xff0c;…

php如何寫一個能讓外部訪問的接口,如何寫一個接口供外界訪問

在工作的時候經常調用別人的接口&#xff0c;獲取數據&#xff0c;然后就想知道這中間的原理是什么呢&#xff1f;今天上一個自己寫的一個測試例子&#xff1a;首先是自己遠程寫好的一個接口&#xff1a;public function testming(){$arrarray(first > 1,hospitalname > …

win10遠程桌面連接

有的情況下&#xff0c;Win10設置了允許遠程桌面連接后&#xff0c;遠程主機仍然不能桌面連接到目標主機上&#xff0c;這時可以在目標主機上嘗試如下修改&#xff1a; 開始-->運行->gpedit.msc->計算機配置->Windows設置->安全設置->本地策略->安全選項-…

10494,沒過,待解決,大數除法

10494,沒過,待解決,大數除法 import java.io.*; import java.util.*;public class Main {public static void main(String[] args) throws FileNotFoundException{// Scanner scanner new Scanner(new File("d://1.txt"));Scanner scanner new Scanner(System.in);…

springboot md5加密_實在!基于Springboot和WebScoket,寫了一個在線聊天小程序

基于Springboot和WebScoket寫的一個在線聊天小程序(好幾天沒有寫東西了&#xff0c;也沒有去練手了&#xff0c;就看了看這個。。。)項目說明此項目為一個聊天的小demo&#xff0c;采用springbootwebsocketvue開發。其中有一個接口為添加好友接口&#xff0c;添加好友會判斷是否…

suse 啟動oracle11g,SuSe10下Oracle11g文件系統模式安裝及配置、網絡配置與連接

SuSe10下Oracle11g文件系統模式安裝及配置、網絡配置與連接概述本課程主要講解oracle數據庫軟件的安裝及配置&#xff0c;以及數據庫的創建過程和網絡配置與連接等&#xff1b;同時講解一些數據庫安裝過程中的常見問題解決辦法。注意&#xff1a;本文當中引用的package_name均為…

Python pyenv

一、簡介 一般在操作系統中我們會安裝多個Python版本&#xff0c;所以在進行Python版本切換時會比較麻煩&#xff0c;pyenv就提供了一種簡單的方式&#xff0c;能簡易地在多個Python版本中進行切換的工具&#xff0c;它簡單而優雅。pyenv有以下功能&#xff1a; 1&#xff09;進…

python中add_Python add()函數是如何使用呢?

Python里經常會出現一些不太常見的函數&#xff0c;大家在遇到這類函數時候&#xff0c;是怎么做的呢&#xff1f;沒有概念&#xff0c;直接過&#xff0c;還是會去查詢下呢&#xff1f;相信大部分人都不會去查詢&#xff0c;因為查詢的內容太復雜了&#xff0c;所以&#xff0…

JavaScript的DOM編程總結

DOM&#xff08;文檔對象模型&#xff09;, 與語言無關, 用于操作XML&#xff08;在Web中&#xff09;和HTML&#xff08;在瀏覽器在&#xff09;文檔的應用程序接口。訪問DOM次數越多, 速度越慢, 費用也就越高。 最小化DOM訪問次數&#xff0c;盡可能在JavaScript端處理。 如果…