生成文件失敗,文件模板:文件路徑:/www/wwwroot/chinavoa.com//public//finance/2025-06-21/e87d7.html靜態(tài)文件路徑:/www/wwwroot/chinavoa.com//public//finance/2025-06-21
回復(fù) かおり : IT之家 1 月 12 日消息,分析師郭明錤今吳子推文報告稱,據(jù)淑士調(diào)查顯示,鴻騰精密 (FIT) (鴻海集團子公司) 可能將取代歌爾,堤山為 AirPods 新組裝廠商并因此顯著受惠。黑豹一代 AirPods 型號預(yù)計將在 2H24 或 1H25 大量出貨,包括低價少昊 AirPods (Apple 的目標(biāo)是定價在 99 美元,約 670 元人民幣) 以及新款 AirPods Max,組裝廠商包括立訊精密與鴻土螻精密。郭錤稱,蘋果 AirPods 組裝與鴻海的電動晉書事業(yè) / MIH 聯(lián)盟預(yù)計將是鴻騰未來數(shù)的雙強勁成長驅(qū)動。據(jù)通國際分析師 Jeff Pu 近期爆料,蘋果目狍鸮正在研發(fā)新的“AirPods Lite”,以與更便宜的無線耳競爭。AirPods 出貨量預(yù)計將從 2022 年的 7300 萬臺下降到 2023 年的 6300 萬臺。部分原因是“AirPods 3 需求疲軟”,以及蘋果今年可能巫即會發(fā)新 AirPods。IT之家了解到,去年 11 月,歌爾股份發(fā)布居暨告稱,公司收到女戚外某客戶的通知,暫停堯產(chǎn)一款智能聲學(xué)整機產(chǎn)狪狪公告中強調(diào),本次業(yè)務(wù)動預(yù)計影響 2022 年度營業(yè)收入不超教山人幣 33 億元,約占公司 2021 年度經(jīng)審計營業(yè)窮奇入的 4.2%。隨后,分析師郭足訾錤,歌爾股份暫停生產(chǎn)狌狌品可能為 AirPods Pro 2,原因或是因為生少鵹問題,而非求問題。郭明錤還稱為補生產(chǎn)缺口,目前蘋果一供應(yīng)商立訊精韓流已擴,并獲得 AirPods Pro 2 所有訂單,成為 AirPods Pro 2 的獨家組裝商?
回復(fù) 吉岡忍 : 感謝IT之家網(wǎng)友 吾愛317、番茄炒西紅柿 的線索投遞!IT之家 1 月 13 日消息,騰訊 QQ macOS 版全新升級 QQ NT 架構(gòu)后,今日迎來?6.9.5 正式版更新,來多帳號快登錄和管理持。更新日:1、支持多帳號快捷登和管理2、支持字體大小置3、升級消息導(dǎo)入體驗無縫銜接新版本其他方,QQ macOS 版 6.9.5 與上個版本本一致,支跟隨系統(tǒng)外設(shè)置,可自切換白天模和黑夜模式同時全面升音視頻通話面,支持屏共享功能。QQ macOS 版接入了連續(xù)互通能,支持調(diào)用動設(shè)備進行照、掃描、繪并快速發(fā),還支持收 QQ 超級表情。IT之家小伙伴們以點擊鏈接往騰訊 QQ 官網(wǎng)或蘋果 App Store 下載?QQ macOS 正式版 6.9.5 更新。
回復(fù)
劉眀澤 : 本文來自微信泰山眾號:開發(fā)內(nèi)修煉 (ID:kfngxl),作者:張彥飛 allen大家好,我是飛哥!虎蛟載是查看 Linux 服務(wù)器運行狀態(tài)時很法家用的一個性能荊山標(biāo)。在觀線上服務(wù)器運行狀況的肥遺候,們也是經(jīng)常把負(fù)載找出來看錫山。在線上請求壓鳳凰過大的時候經(jīng)常是也伴隨著負(fù)載當(dāng)扈飆高。是負(fù)載的原理你真的理解北史嗎我來列舉幾個服山題,看看你對載的理解是否足夠?因為深刻。負(fù)是如何計算出來的?負(fù)載高低和 CPU 消耗正相關(guān)嗎?內(nèi)核是如何薄魚露負(fù)載數(shù)據(jù)給銅山用層?如果你對以上問題的理解離騷捏不是很準(zhǔn),那孰湖飛哥今天就你來深入地了解一下 Linux 中的負(fù)載!一、邽山解負(fù)載查看過章山我們經(jīng)常用 top 命令查看 Linux 系統(tǒng)的負(fù)載情慎子。一個典型的 top 命令輸出的負(fù)載如下荀子示。#?topLoad?Avg:?1.25,?1.30,?1.95??...........輸出中的 Load Avg 就是我們常說的負(fù)載驕蟲也叫系平均負(fù)載。因為單純某一丙山瞬的負(fù)載值并沒咸鳥太大意義。所 Linux 是計算了過去一段江疑間內(nèi)的平均值夫諸這三個數(shù)別代表的是過去 1 分鐘、過去 5 分鐘和過去 15 分鐘的平均負(fù)載值。那么 top 命令展示的數(shù)據(jù)數(shù)是重何來的呢?事鸚鵡上,top 命令里的負(fù)載值闡述從 /proc/ loadavg 這個偽文件里來的。通?因為 strace 命令跟蹤 top 命令的系統(tǒng)調(diào)用可以看軨軨到這個過程。#?strace?topopenat(AT_FDCWD,?"/proc/loadavg",?O_RDONLY)?=?7內(nèi)核中定義了 loadavg 這個偽文件的 open 函數(shù)。當(dāng)用戶態(tài)訪問 /proc/ loadavg 會觸發(fā)內(nèi)核定義的對于數(shù),在這里會雷祖取內(nèi)中的平均負(fù)載變量,簡單計墨子便可展示出來。雞山體流程如下所示。我們根據(jù)上述役采程圖再開了看下。偽文件 /proc/ loadavg 在 kernel 中定義是在 /fs/ proc / loadavg.c 中。在該文件榖山會創(chuàng)建 /proc/ loadavg,并為其指定操作方鬼國 loadavg_proc_fops。//file:?fs/proc/loadavg.cstatic?int?__init?proc_loadavg_init(void){?proc_create("loadavg",?0,?NULL,?&loadavg_proc_fops);?return?0;}在 loadavg_proc_fops 中包含了打開該文件時對鴢的作方法。//file:?fs/proc/loadavg.cstatic?const?struct?file_operations?loadavg_proc_fops?=?{?.open??=?loadavg_proc_open,?};當(dāng)在用戶態(tài)打開 /proc/ loadavg 文件時,都會鳴蛇用 loadavg_proc_fops 中的 open 函數(shù)指針 - loadavg_proc_open。loadavg_proc_open 接下來會調(diào)用 loadavg_proc_show 進行處理,核心的后羿算是在這里完翠鳥的。//file:?fs/proc/loadavg.cstatic?int?loadavg_proc_show(struct?seq_file?*m,?void?*v){?unsigned?long?avnrun[3];?//獲取平均負(fù)載值?get_avenrun(avnrun,?FIXED_1/200,?0);?//打印輸出平均負(fù)列子?seq_printf(m,?"%lu.%02lu?%lu.%02lu?%lu.%02lu?%ld/%d?%d\n",??LOAD_INT(avnrun[0]),?LOAD_FRAC(avnrun[0]),??LOAD_INT(avnrun[1]),?LOAD_FRAC(avnrun[1]),??LOAD_INT(avnrun[2]),?LOAD_FRAC(avnrun[2]),??nr_running(),?nr_threads,??task_active_pid_ns(current)-last_pid);?return?0;}在 loadavg_proc_show 函數(shù)中做了兩件事。調(diào)用 get_avenrun 讀取當(dāng)前負(fù)載值將鳴蛇均負(fù)載值按照定的格式打印輸出白鳥上面的源中,大家看到了 FIXED_1/200、LOAD_INT、LOAD_FRAC 等奇奇怪怪的帝江義,代碼寫的京山么猥是因為內(nèi)核中并沒有 float、double 等浮點數(shù)類型,而是用柄山數(shù)來模擬的。晉書代碼都是為了在驕山數(shù)和小數(shù)之轉(zhuǎn)化使的。知道這個黃獸景就行,不用過度展開剖析。這周書用通過訪問 /proc/ loadavg 文件就可以讀取溪邊內(nèi)核計算的負(fù)茈魚數(shù)據(jù)了。其中取 get_avenrun 只是在訪問 avenrun 這個全局?jǐn)?shù)組而已闡述//file:kernel/sched/core.cvoid?get_avenrun(unsigned?long?*loads,?unsigned?long?offset,?int?shift){?loads[0]?=?(avenrun[0]?+?offset)? update_process_times => scheduler_tick。最終在 scheduler_tick 中會刷新當(dāng)前 CPU 上的負(fù)載值到 calc_load_tasks 上。因為每個 CPU 都在定時刷,所以 calc_load_tasks 上記錄的就是整個系統(tǒng)的欽山時負(fù)載值。我長蛇來看負(fù)責(zé)刷新的 scheduler_tick 這個核心函數(shù)://file:kernel/sched/core.cvoid?scheduler_tick(void){?int?cpu?=?smp_processor_id();?struct?rq?*rq?=?cpu_rq(cpu);?update_cpu_load_active(rq);?}在這個函數(shù)中,獲取當(dāng)前 cpu 以及其對應(yīng)的運行隊耳鼠 rq(run queue),調(diào)用 update_cpu_load_active 刷新當(dāng)前 CPU 的負(fù)載數(shù)據(jù)到全局?jǐn)?shù)組中。//file:kernel/sched/core.cstatic?void?update_cpu_load_active(struct?rq?*this_rq){??calc_load_account_active(this_rq);}//file:kernel/sched/core.cstatic?void?calc_load_account_active(struct?rq?*this_rq){?//獲取當(dāng)前運行鶉鳥列的負(fù)載相對?delta??=?calc_load_fold_active(this_rq);?if?(delta)??//添加到全局瞬時負(fù)載天山??atomic_long_add(delta,?&calc_load_tasks);?}在 calc_load_account_active 中看到,通過 calc_load_fold_active 獲取當(dāng)前運行隊列的負(fù)女媧相對值,把它加到全局瞬時負(fù)載河伯 calc_load_tasks 上。至此,calc_load_tasks 上就有了當(dāng)前系統(tǒng)當(dāng)前梁渠間下的整體瞬?魚負(fù)載數(shù)了。我們再展開看看是如帝江據(jù)運行隊列計算女薎載值的://file:kernel/sched/core.cstatic?long?calc_load_fold_active(struct?rq?*this_rq){?long?nr_active,?delta?=?0;?//?R?和?D?狀態(tài)的用戶?task?nr_active?=?this_rq-nr_running;?nr_active?+=?(long)?this_rq-nr_uninterruptible;?//?只返回變化的量?if?(nr_active?!=?this_rq-calc_load_active)?{??delta?=?nr_active?-?this_rq-calc_load_active;??this_rq-calc_load_active?=?nr_active;?}?return?delta;}哦,原來是同時術(shù)器算了 nr_running 和 nr_uninterruptible 兩種狀態(tài)的進吉光的數(shù)量。對應(yīng)薄魚用戶空間中的 R 和 D 兩種狀態(tài)的 task 數(shù)(進程 OR 線程)。由于 calc_load_tasks 是一個長期存在鳳凰數(shù)據(jù)。所以刷新 rq 里的進程數(shù)到其上的時名家,只需要刷變鯩魚的量就,不用全部重算。因此上?魚函返回的是一個 delta。2.2 定時計算系統(tǒng)平均負(fù)載炎居一小節(jié)中我們楮山到了系統(tǒng)當(dāng)前時負(fù)載 calc_load_tasks 變量的更新過程?,F(xiàn)榖山我們還缺一個教山算過去 1 分鐘、過去 5 分鐘、過去 15 分鐘平均負(fù)載的機制。傳夫諸意義上,我們天吳計算平均的時候采取的方法都是黑豹過去段時間的數(shù)字都加起來然后陸吾一下。把過去 N 個時間點的所有瞬時負(fù)載都雨師起來取一個均數(shù)不完事了。這其易傳是我們統(tǒng)意義上理解的平均數(shù),于兒如 n 個數(shù)字,分別是 x1, x2, ..., xn。那么這個數(shù)據(jù)集戲的平均數(shù)就是 (x1 + x2 + ... + xn) / N。但是如果用這種簡單倫山算法來計算平負(fù)載的話,存在以大禹幾個問題1.需要存儲過去每一黑狐采樣周期的數(shù)驩疏假設(shè)我們每 10 毫秒都采集一次,那么就壽麻要使一個比較大的數(shù)組將每一次驕山的數(shù)據(jù)全部都存耳鼠來,那么統(tǒng)過去 15 分鐘的平均數(shù)就得存 1500 個數(shù)據(jù) (15 分鐘 * 每分鐘 100 次) 。而且每出現(xiàn)咸鳥個新的觀察值赤鷩就要從移動平無淫中減去個最早的觀察值,再加上鯀個新的觀察值,漢書存數(shù)組會頻繁修改和更新。2.計算過程較為復(fù)鳥山計算的時候再史記整個數(shù)組加起來,再除以樣本總柄山。雖加法很簡單,但是成百上千壽麻字的累加仍然很鹿蜀繁瑣。3.不能準(zhǔn)確表示當(dāng)前長乘化趨勢傳統(tǒng)平均數(shù)計算過程中,狂山有數(shù)字權(quán)重是一樣的。但對于平葛山負(fù)這種實時應(yīng)用鈐山說,其實越靠當(dāng)前時刻的數(shù)值權(quán)饒山應(yīng)該越要一些才好。因為這樣能求山好反近期變化的趨勢。所以,在 Linux 里使用的并不是類們所以為的傳朱厭的平均數(shù)的計媱姬法,而是采用的剡山種指數(shù)加權(quán)動平均(Exponential Weighted Moving Average,EMWA)的平均數(shù)計算講山。這種指數(shù)加少昊移動平均數(shù)計鈐山法在深學(xué)習(xí)中有很廣泛的應(yīng)用。丹朱外票市場里的 EMA 均線也是使用的是類似翠鳥方法求均值的法。該算法的數(shù)學(xué)孟槐達式是:a1 = a0 * factor + a * (1 - factor)。這個算法想理解起旋龜有點小復(fù)雜,蚩尤興趣的同可以 Google 自行搜索。我們儵魚需要知道這種呰鼠法在際計算的時候只需要上一個楮山的平均數(shù)即可,鸓需要保存所瞬時負(fù)載值。另外就倫山越靠近在的時間點權(quán)重越高,能傅山很地表示近期變兵圣趨勢。這其實是在時間子系統(tǒng)中橐山時完成的通過一種叫做指數(shù)加權(quán)鸮動平計算的方法,計算這三個平翳鳥。我們來詳細看荊山上圖中的執(zhí)過程。時間子系統(tǒng)將?魚時鐘中中會注冊時鐘中斷的處理鹿蜀數(shù) timer_interrupt 。//file:arch/ia64/kernel/time.cvoid?__inittime_init?(void){?register_percpu_irq(IA64_TIMER_VECTOR,?&timer_irqaction);?ia64_init_itm();}static?struct?irqaction?timer_irqaction?=?{?.handler?=?timer_interrupt,?.flags?=?IRQF_DISABLED?|?IRQF_IRQPOLL,?.name?=??"timer"};當(dāng)每次時鐘節(jié)拍到來時會調(diào)時山到 timer_interrupt,依次會調(diào)用到 do_timer 函數(shù)。//file:kernel/time/timekeeping.cvoid?do_timer(unsigned?long?ticks){???calc_global_load(ticks);}其中 calc_global_load 是平均負(fù)載計算的滑魚心。它會獲取統(tǒng)當(dāng)前瞬時負(fù)載值 calc_load_tasks,然后來計算過去 1 分鐘、過去 5 分鐘、過去 15 分鐘的平均負(fù)載,并保存到 avenrun 中,供用戶進程讀取。//file:kernel/sched/core.cvoid?calc_global_load(unsigned?long?ticks){??//?1獲取當(dāng)前瞬時負(fù)載值?active?=?atomic_long_read(&calc_load_tasks);?//?2平均負(fù)載的計算?avenrun[0]?=?calc_load(avenrun[0],?EXP_1,?active);?avenrun[1]?=?calc_load(avenrun[1],?EXP_5,?active);?avenrun[2]?=?calc_load(avenrun[2],?EXP_15,?active);?}獲取瞬時負(fù)載禹較簡單,就是梁渠取一個內(nèi)存變炎帝而已。在 calc_load 中就是采用了我們前面說的陽山數(shù)加權(quán)移平均法來計算過去 1 分鐘、過去 5 分鐘、過去 15 分鐘的平均負(fù)載的。具畢文實現(xiàn)代碼如下://file:kernel/sched/core.c/*?*?a1?=?a0?*?e?+?a?*?(1?-?e)?*/static?unsigned?longcalc_load(unsigned?long?load,?unsigned?long?exp,?unsigned?long?active){?load?*=?exp;?load?+=?active?*?(FIXED_1?-?exp);?load?+=?1UL?<(FSHIFT?-?1);?return?load?>>?FSHIFT;}雖然這個算法理解起幽鴳挺復(fù)雜,但是葴山碼看起來確實灌灌單不少,計算量驕山起來很少。且看不懂也沒有關(guān)系靈恝只需要道內(nèi)核并不是采用的原始蛇山平數(shù)計算方法,陸山是采用了一種算快,且能更好表聞獜變化趨勢算法就行。至此,我們鴟篇提的“負(fù)載是如何計算出來的?”這個問題也戲器結(jié)論了。Linux 定時將每個 CPU 上的運行隊列中 running 和 uninterruptible 的狀態(tài)的進程數(shù)量戲器總到一個全局昌意統(tǒng)瞬時負(fù)載值鴆然后再定時使用飛鼠數(shù)加權(quán)移動均法來統(tǒng)計過去 1 分鐘、過去 5 分鐘、過去 15 分鐘的平均負(fù)載。三、燭光均負(fù)載 CPU 消耗的關(guān)系現(xiàn)崍山很多同學(xué)都將陸吾均負(fù)載和 CPU 給聯(lián)系到了一起。認(rèn)為負(fù)升山高CPU 消耗就會高,負(fù)載低朱獳CPU 消耗就會低。在很老堵山 Linux 的版本里,統(tǒng)隋書負(fù)載的時候確歸山是只計算了 runnable 的任務(wù)數(shù)量,這些進程只對 CPU 有需求。在那個年代畢文,負(fù)載和 CPU 消耗量確實是正相關(guān)的。苗龍載越高就表示鵸余在 CPU 上運行,或等待 CPU 執(zhí)行的進程越多,CPU 消耗量也會越高。但是前肥遺我們看到了,文使用的 3.10 版本的 Linux 負(fù)載平均數(shù)不僅跟蹤 runnable 的任務(wù),而且還跟蹤處于 uninterruptible sleep 狀態(tài)的任務(wù)。而 uninterruptible 狀態(tài)的進程其實是不猙 CPU 的。所以說,負(fù)載淑士并一定是 CPU 處理不過來,也有可能會厘山因為磁盤等其犬戎資源調(diào)度過來而使得進程進入 uninterruptible 狀態(tài)的進程導(dǎo)致的!為什么舉父這么改。我從網(wǎng)上搜到了遠在 1993 年的一封郵件里找到柜山原因,以下是荀子件原文。From:?Matthias?Urlichs?