多線程真的比單線程執(zhí)行效率高嗎?
看場景;
效率的瓶頸不在代碼的時(shí)候,比如用的最多的io操作,
下載器,下載服務(wù)器每個(gè)接口就給你500k的速度,那多線程相當(dāng)于500*n,本地網(wǎng)絡(luò)最大2m每秒,可以開3~5個(gè)線程自然快;
復(fù)制器,windows操作系統(tǒng)復(fù)制文件很慢,因?yàn)樨?fù)責(zé)復(fù)制的api防止系統(tǒng)卡死每個(gè)線程就給你那點(diǎn)速度,如果用java寫個(gè)多線程io流復(fù)制,速度快8倍左右;
這樣的場合有個(gè)特點(diǎn),速度或者說效率的關(guān)鍵不是java的處理能力,而是接口限制成了瓶頸;
舉個(gè)反例,如果對一個(gè)集合進(jìn)行遍歷,打印value,使用多線程明顯比單線程效率低;因?yàn)闀r(shí)間過多的消耗在了創(chuàng)建線程,銷毀線程上,執(zhí)行的有用代碼和單線程沒區(qū)別,效率不如單線程;