線程池設(shè)置多大最佳 線程池的參數(shù)的存活時(shí)間是干嘛的?
線程池的參數(shù)的存活時(shí)間是干嘛的?keepAliveTime(線程存活下來(lái)保持時(shí)間)作用:當(dāng)線程池中線程數(shù)小于核心線程數(shù)時(shí),線程的空閑時(shí)間假如達(dá)到線程活下來(lái)時(shí)間,那你這個(gè)線程是會(huì)被全部銷(xiāo)毀,等到線程池中
線程池的參數(shù)的存活時(shí)間是干嘛的?
keepAliveTime(線程存活下來(lái)保持時(shí)間)作用:當(dāng)線程池中線程數(shù)小于核心線程數(shù)時(shí),線程的空閑時(shí)間假如達(dá)到線程活下來(lái)時(shí)間,那你這個(gè)線程是會(huì)被全部銷(xiāo)毀,等到線程池中的線程數(shù)小于等于核心線程數(shù)。
windows程序有多少個(gè)線程最為合適,該如何解決?
在自學(xué)IOCP的時(shí)候,網(wǎng)上每個(gè)教程都強(qiáng)調(diào),為了從結(jié)束隊(duì)列接過(guò)數(shù)據(jù)的線程建議是CPU數(shù)量的兩倍。這是為了注意增加線程的直接切換。
這個(gè)我懂,一個(gè)網(wǎng)絡(luò)庫(kù)里面,會(huì)有多個(gè)線程池,諸如從緩沖隊(duì)列拿出數(shù)據(jù)的,單獨(dú)去處理的,處理后組建緩沖區(qū)回發(fā)的,這些線程池合站了起來(lái)也會(huì)創(chuàng)建家族很線程的,這樣這不是差不多的讓CPU快速切換的厲害么?是不是我一個(gè)程序里面所有的線程合過(guò)來(lái)是CPU數(shù)量的2倍好是呢?(或則有一點(diǎn)多點(diǎn),達(dá)到一個(gè)平衡)
比如說(shuō)一個(gè)灶臺(tái)最好是兩個(gè)廚師相互用好點(diǎn),一個(gè)炒菜時(shí)一個(gè)就去切菜,切再說(shuō)讓他來(lái)炒菜時(shí),這樣就合理利用了,但伙食管理員卻并又不能讓灶臺(tái)只不過(guò)炒菜時(shí),它還是需要用它來(lái)燉湯,的或燒熱水(其他的處理線程),那這樣的話一般的會(huì)會(huì)造成灶臺(tái)這里直接切換來(lái)切換到去的,效率也會(huì)大打折扣。
那到底多少個(gè)線程最好就是呢??
菜雞求問(wèn),c 里的epoll和java里的線程池到底怎么理解,優(yōu)劣如何?
服務(wù)器并發(fā)模型通??煽煞謫尉€程和多線程模型,這里的線程大多數(shù)是指“I/O線程”,即負(fù)責(zé)I/O你的操作,協(xié)調(diào)分配任務(wù)的“管理線程”,而換算的請(qǐng)求和任務(wù)大多數(shù)交由說(shuō)白“工作者線程”去處理。通常線程模型下,每個(gè)線程既已I/O線程又是工作者線程。所以這里再討論的是,單I/O線程多工作者線程的模型,這都是使用的的一種服務(wù)器并發(fā)模型。我的地方的項(xiàng)目中的server代碼中,這種模型隨處可見(jiàn)。它有個(gè)名字,叫“半同步/半同步異步“模型,另外,這種模型也是生產(chǎn)者/消費(fèi)者(尤其是多消費(fèi)者)模型的一種表現(xiàn)。
這種架構(gòu)通常是設(shè)計(jì)和實(shí)現(xiàn)I/O多路復(fù)用的思想(主要注意是epoll,select/poll已跟不上潮流),通過(guò)單線程I/O多路復(fù)用,可以不至少高效并發(fā),另外避免了多線程I/O四處切換到的各種開(kāi)銷(xiāo),思路清晰,易于管理,而設(shè)計(jì)和實(shí)現(xiàn)線程池的多工作者線程,又是可以全面發(fā)揮和借用多線程的優(yōu)勢(shì),借用線程池,盡快能提高資源復(fù)用性和盡量避免才能產(chǎn)生太多線程。
epoll是linux下高并發(fā)服務(wù)器的超級(jí)方案,畢竟是基于事件觸發(fā)的,因?yàn)楸萻elect快的不只不過(guò)是一個(gè)數(shù)量級(jí)。
單線程epoll,觸發(fā)時(shí)量可提升到15000,但另外業(yè)務(wù)后,因?yàn)榇蠖鄶?shù)業(yè)務(wù)都與數(shù)據(jù)庫(kù)交道,所以我可能會(huì)未知會(huì)堵塞的情況,這會(huì)兒就需要用多線程來(lái)提速。