當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式硬件
[導(dǎo)讀]作者Email: zoutom@163.com 摘要:介紹了QNX實(shí)時(shí)操作系統(tǒng)和多線程編程技術(shù),包括線程間同步的方法、多線程程序的分析步驟、線程基本程序結(jié)構(gòu)以及實(shí)用編譯方法。 關(guān)鍵詞:QN

作者Email: zoutom@163.com 摘要:介紹了QNX實(shí)時(shí)操作系統(tǒng)和多線程編程技術(shù),包括線程間同步的方法、多線程程序的分析步驟、線程基本程序結(jié)構(gòu)以及實(shí)用編譯方法。 關(guān)鍵詞:QNX;多線程;同步;程序結(jié)構(gòu) 0引言: QNX是由加拿大QNX軟件有限系統(tǒng)公司開(kāi)發(fā)的一種多任務(wù)、分布式、可嵌入的實(shí)時(shí)操作系統(tǒng)。它有著輕巧的微內(nèi)核,可以對(duì)進(jìn)程進(jìn)行全面的地址保護(hù),可剪裁,模塊化程度高,實(shí)時(shí)性強(qiáng),安全可靠。符合POSIX標(biāo)準(zhǔn)的API使它成為一個(gè)開(kāi)放式互聯(lián)系統(tǒng),便于與UNIX/LINUX系統(tǒng)的移植。QNX有著不同于 UNIX或LINUX的模塊化設(shè)計(jì)思想,并不是UNIX或LINUX的一種演化,而是完全不同的一種全新的實(shí)時(shí)操作系統(tǒng)。由于其獨(dú)特的體系結(jié)構(gòu),QNX廣泛應(yīng)用于嵌入式系統(tǒng)、機(jī)器人工程、工業(yè)控制、航空航天等各個(gè)領(lǐng)域。 在QNX中,線程是一個(gè)單一的控制執(zhí)行流。從程序的最低層角度考慮,線程包括當(dāng)前指令位置指針(也稱為計(jì)數(shù)器或PC)、棧頂指針(SP)和一些寄存器,而進(jìn)程占據(jù)一定的內(nèi)存空間,是一個(gè)或多個(gè)線程的集合。在同一進(jìn)程中的線程共享許多資源,在QNX系統(tǒng)中共享的資源有:內(nèi)存中儲(chǔ)存在棧區(qū)以外的變量——即非局部變量;信號(hào)處理器;信號(hào)忽略屏蔽字;通道——建立于服務(wù)器端;連接——建立于客戶端,而在不同進(jìn)程中的線程除了CPU之外,幾乎不共享任何資源。當(dāng)然 QNX提供了shm_open()函數(shù)來(lái)使不同進(jìn)程中的線程共享一段內(nèi)存。 在早期的QNX版本如QNX4中,對(duì)于線程的支持是比較弱的,在當(dāng)時(shí)的條件下,處理大型、復(fù)雜的并發(fā)多任務(wù)問(wèn)題時(shí),常常將問(wèn)題分解為多個(gè)進(jìn)程以降低問(wèn)題的復(fù)雜性。而且QNX提供了與UNIX類似的進(jìn)程間通訊IPC手段如消息、代理、信號(hào)燈等,功能也相對(duì)比較成熟、完善。1999年以后 QNX軟件公司推出了QNX/Neutrino實(shí)時(shí)操作系統(tǒng)的Neutrino2.0、Neutrino6.0增加了對(duì)于POSIX線程的支持,標(biāo)準(zhǔn)的 API不但使它易于擴(kuò)展,而且也使得編寫(xiě)多線程程序變得容易。由于線程具上下文較輕、切換較快、在創(chuàng)建多個(gè)線程時(shí)系統(tǒng)的開(kāi)銷(xiāo)比較小、通訊手段靈活多樣、共享資源豐富等優(yōu)點(diǎn),在處理大型并發(fā)多任務(wù)問(wèn)題時(shí)多線程有了明顯的優(yōu)勢(shì)。QNX是搶先式多任務(wù)系統(tǒng),這種系統(tǒng)決定了多個(gè)線程在訪問(wèn)共享資源時(shí)線程執(zhí)行的次序變得不可預(yù)期,所以線程間的同步就顯得極為重要。QNX提供了多種同步機(jī)制以保證多線程程序的安全、可靠。 1 QNX多線程庫(kù)函數(shù)簡(jiǎn)介 QNX與LINUX不同,沒(méi)有單獨(dú)的線程庫(kù),與線程有關(guān)的API是作為C語(yǔ)言庫(kù)函數(shù)的一部分使用的,頭文件是,同樣方便地提供線程的創(chuàng)建、終止和同步等功能。QNX不僅在C語(yǔ)言庫(kù)函數(shù)中提供了符合POSIX1003.1c標(biāo)準(zhǔn)的與線程相關(guān)的API,而且還提供了很多POSIX標(biāo)準(zhǔn)沒(méi)有的擴(kuò)展功能,使得多線程編程變得更加容易。 1.1線程的創(chuàng)建、取消和終止 1.11線程的創(chuàng)建 QNX通過(guò)pthread_create()函數(shù)創(chuàng)建線程,API定義如下: int pthread_create( pthread t* thread, const pthread attr t* attr, void* (*start routine)(void* ), void* arg ); pthread_create()創(chuàng)建的線程執(zhí)行start routine() 函數(shù),thread返回創(chuàng)建的線程描述符,而attr是創(chuàng)建線程時(shí)設(shè)置的線程屬性,arg可以作為任意類型的參數(shù)傳給start routine()函數(shù)。QNX對(duì)創(chuàng)建線程前需要設(shè)置的線程屬性進(jìn)行了擴(kuò)展,增加了POSIX標(biāo)準(zhǔn)無(wú)法設(shè)置的屬性如:可以禁止一個(gè)線程的取消(終止操作);可以設(shè)置一個(gè)線程的取消類型;可以指定當(dāng)一個(gè)線程接到信號(hào)時(shí),它如何操作。 1.12 線程的取消 QNX通過(guò)調(diào)用int pthread_cancel(pthread_t thread)函數(shù)取消由thread指定的線程,如果成功則返回0,否則為非0,成功并不意味著thread會(huì)終止,要視取消的狀態(tài)和類型而定。QNX 提供了設(shè)定取消狀態(tài)和類型的API pthread_setcancelstate()和pthread_setcanceltype(),取消的狀態(tài)有兩種:PTHREAD_CANCEL_ENABLE表示將線程設(shè)為取消狀態(tài),PTHREAD_CANCEL_DISABLE表示忽略取消狀態(tài);取消的類型也有兩種: THREAD_CANCEL_DEFFERED表示執(zhí)行到取消點(diǎn)取消,PTHREAD_CANCEL_ASYCHRONOUS表示立即取消。 1.13 線程的終止 QNX中終止一個(gè)線程需要調(diào)用pthread exit(),其API定義: void pthread exit( void* value ptr ); 當(dāng)一個(gè)線程在執(zhí)行了start routine()函數(shù)后返回時(shí),系統(tǒng)自動(dòng)隱式調(diào)用pthread exit()使其退出,start routine()的返回值,作為線程的退出狀態(tài)。在一個(gè)線程中也可以顯式調(diào)用pthread exit()退出,對(duì)于單線程進(jìn)程而言,調(diào)用pthread exit()與調(diào)用exit(0)是等效的。 1.2 線程的常用控制函數(shù) pthread_self() API: pthread_t pthread_self(void); 說(shuō)明:返回線程描述符,pthread_create()返回值相同。 pthread_equal() API: int pthread_equal(pthread_t t1,pthread_t t2); 說(shuō)明:t1,t2為線程描述符,可調(diào)用pthread_self()和pthread_create()得到。此函數(shù)功能為比較兩個(gè)線程的描述符,不管線程描述符是否合法。如果返回值為非零說(shuō)明兩個(gè)線程是同一線程,為零說(shuō)明兩個(gè)線程不是同一線程。 pthread_join() API: int pthread_join(pthread_t thread, void** value_ptr); 說(shuō)明:thread 為等待終止的目標(biāo)線程,value_ptr為一指針,當(dāng)值不為NULL時(shí)指向一個(gè)內(nèi)存空間,這個(gè)空間用來(lái)存放目標(biāo)線程傳給pthread_exit()的數(shù)據(jù)。調(diào)用pthread_join()的線程將被掛起,直到目標(biāo)線程終止。一個(gè)線程僅允許唯一的線程使用pthread_join()等待它的終止,并且被等待的線程應(yīng)該處于非DETACHED狀態(tài)。QNX也提供了非POSIX的 pthread_timedjoin(),不同之處是線程在給定時(shí)間里沒(méi)有被join時(shí),此函數(shù)會(huì)返回一個(gè)錯(cuò)誤信息。 pthread_detach() API: int pthread_detach(pthread_t thread); 說(shuō)明:此函數(shù)功能是將一給定線程thread分離,當(dāng)一個(gè)出于分離狀態(tài)的線程終止時(shí),線程擁有的所有系統(tǒng)資源將被立即釋放。 2 QNX線程的互斥和同步機(jī)制 線程間的互斥操作是指對(duì)于特定的一段代碼或一個(gè)變量,在程序運(yùn)行時(shí)只能有一個(gè)線程對(duì)其進(jìn)行操作,其他線程不能同時(shí)進(jìn)入代碼或修改變量。線程間的同步操作是指若干個(gè)線程都等待某個(gè)事件的發(fā)生,當(dāng)這個(gè)事件發(fā)生時(shí),所有的線程同時(shí)進(jìn)行下一步工作。為了防止競(jìng)爭(zhēng)條件和數(shù)據(jù)被破壞的情況發(fā)生,QNX提供了多種互斥和同步機(jī)制,包括互斥體、條件變量、信號(hào)燈、屏障、讀/寫(xiě)鎖、sleepon鎖等,其中最主要的是互斥體和條件變量,其余的同步機(jī)制都是由他們組合而成的,當(dāng)然你也可以根據(jù)自己的要求構(gòu)建自己的同步機(jī)制。 互斥體——QNX使用了互斥體來(lái)實(shí)現(xiàn)互斥操作,在初始化互斥體后,將給定的代碼或變量的前后進(jìn)行加鎖、解鎖操作,線程在訪問(wèn)之前要先得到互斥體,這樣就可以保證只有一個(gè)線程能訪問(wèn)到代碼或變量,而其余的線程會(huì)處于阻塞狀態(tài)直到互斥體被釋放。這種機(jī)制保證了線程對(duì)資源訪問(wèn)的互斥性,達(dá)到了對(duì)代碼或變量的保護(hù)。 條件變量——QNX的條件變量用來(lái)同步線程,所有線程都會(huì)等待一個(gè)條件變量可用,當(dāng)條件滿足時(shí),一個(gè)線程發(fā)出廣播或信號(hào)來(lái)同步所有的線程或某一線程。為了防止多個(gè)線程同時(shí)申請(qǐng)等待而產(chǎn)生競(jìng)爭(zhēng),條件變量通常要與互斥體聯(lián)合使用。 信號(hào)燈——QNX信號(hào)燈也是一種符合POSIX標(biāo)準(zhǔn)的的同步機(jī)制,它是由互斥體和條件變量結(jié)合一些數(shù)據(jù)構(gòu)造而成的,QNX系統(tǒng)將其封裝在C語(yǔ)言庫(kù)函數(shù)中,頭文件是。它的功能很強(qiáng)大,可以允許多個(gè)線程訪問(wèn)同一資源,可以通過(guò)設(shè)定燈值來(lái)限定線程的個(gè)數(shù),燈值為一時(shí)它就是互斥體。 屏障——POSIX 1003.1j提議的內(nèi)容,主要由互斥體、條件變量和計(jì)數(shù)器構(gòu)造而成。作用是停止某些線程,當(dāng)所要求的線程數(shù)量到達(dá)屏障時(shí),所有的線程被允許繼續(xù)運(yùn)行。屏障通常被用來(lái)確保某些并行算法中的所有合作線程在任何線程可以繼續(xù)運(yùn)行以前到達(dá)算法中的一個(gè)特定點(diǎn)。 讀/寫(xiě)鎖——POSIX 1003.1j提議的內(nèi)容,主要由一個(gè)互斥體和兩個(gè)條件變量構(gòu)造,兩個(gè)條件變量分別控制讀寫(xiě)操作。讀/寫(xiě)鎖允許多個(gè)線程同時(shí)讀數(shù)據(jù),但是禁止任何線程修改正在被其他線程讀或修改的數(shù)據(jù),也可以讓一個(gè)線程獨(dú)占寫(xiě)訪問(wèn),但此時(shí)任何讀訪問(wèn)的線程都不能繼續(xù),直到讀/寫(xiě)鎖被釋放,所以讀/寫(xiě)鎖被用來(lái)保護(hù)經(jīng)常需要讀但是通常不需要修改的信息。 Sleepon鎖——QNX6所獨(dú)有的一種同步機(jī)制,由一個(gè)互斥體和一些數(shù)據(jù)構(gòu)造而成,與條件變量相似但是用法比較簡(jiǎn)單。它與條件變量的不同在于當(dāng)有N個(gè)線程阻塞在M個(gè)對(duì)象的時(shí)候,如果用條件變量來(lái)同步時(shí)需要用到M個(gè)條件變量,而sleepon鎖為每個(gè)線程自動(dòng)分配條件變量,只需要N個(gè)條件變量,使用合適可以節(jié)約系統(tǒng)資源。 3 多線程程序的設(shè)計(jì)分析與基本結(jié)構(gòu) 3.1多線程程序的設(shè)計(jì)分析 1)確定完成任務(wù)所需的最少線程個(gè)數(shù)。 多余的線程只會(huì)使程序的復(fù)雜性增加,出錯(cuò)的可能性也隨之增加。設(shè)計(jì)程序時(shí)要遵循簡(jiǎn)單、高效、安全的原則,如果用單線程能夠很好的完成任務(wù),那么一定不要用多線程。 2)分析多線程需要共享的數(shù)據(jù)。 在多線程程序中常常需要共享一些數(shù)據(jù),通常是一些全局變量,如果數(shù)據(jù)量很大可能需要開(kāi)辟共享內(nèi)存區(qū)。 3) 根據(jù)共享數(shù)據(jù)的特點(diǎn)選擇需要的保護(hù)機(jī)制。 多個(gè)線程需要寫(xiě)操作的變量可以用互斥體保護(hù),經(jīng)常需要讀操作而很少進(jìn)行寫(xiě)操作的可以用讀/寫(xiě)鎖保護(hù)等。 4) 分析工作線程需要訪問(wèn)資源。 工作線程可能需要訪問(wèn)硬件,等待硬件響應(yīng)、可能需要訪問(wèn)某一數(shù)據(jù)庫(kù)、也可能不訪問(wèn)任何資源只是進(jìn)行一些計(jì)算等等。這時(shí)需要考慮相應(yīng)的同步機(jī)制,可以用條件變量結(jié)合互斥體,也可以用更為簡(jiǎn)單的sleepon鎖。 5)進(jìn)行線程的清理工作。 線程完成工作后可能會(huì)自動(dòng)退出,也可能會(huì)阻塞在某處,甚至工作線程還沒(méi)完成工作的時(shí)候主線程已經(jīng)退出,造成整個(gè)進(jìn)程的結(jié)束,使程序失敗。有多種方法可以完成線程的清理工作,可以讓主線程調(diào)用pthread_join()函數(shù)清理工作線程,可以用屏障同步機(jī)制清理,也可以用條件變量來(lái)完成清理工作。 3.2多線程程序的基本結(jié)構(gòu) 多線程編程的結(jié)構(gòu)有很多種,但基本的編程結(jié)構(gòu)總結(jié)起來(lái)有三種:流水線結(jié)構(gòu)、工作組結(jié)構(gòu)、客戶端/服務(wù)器結(jié)構(gòu)。這三種結(jié)構(gòu)可以以任意方式組合,來(lái)滿足實(shí)際工程的需求。 1) 流水線結(jié)構(gòu) 在流水線結(jié)構(gòu)中,需要處理的“數(shù)據(jù)”串行地被一組線程順序處理,每個(gè)線程依次在每個(gè)數(shù)據(jù)元素上執(zhí)行一個(gè)特定的操作,完成操作后將結(jié)果傳遞給流水線中的下一個(gè)線程。如圖1所示。

2) 工作組結(jié)構(gòu) 在工作組結(jié)構(gòu)中,數(shù)據(jù)有一組線程分別獨(dú)立地處理,每個(gè)線程處理不同的部分。由于所有的工作線程在不同的數(shù)據(jù)部分上執(zhí)行相同的操作,這種模式通常被稱為 SIMD(單指令多數(shù)據(jù)流)并行處理。但是工作組中的線程可以不使用SIMD模型,他們可以在不同的數(shù)據(jù)上執(zhí)行不同的操作。工作組結(jié)構(gòu)是多線程程序應(yīng)用較多的一種結(jié)構(gòu)。如圖2所示

圖2 工作組結(jié)構(gòu) 3) 客戶端/服務(wù)器結(jié)構(gòu) 在客戶/服務(wù)器結(jié)構(gòu)中,客戶請(qǐng)求服務(wù)器對(duì)一組數(shù)據(jù)執(zhí)行某個(gè)操作。客戶端獨(dú)立地執(zhí)行操作,而客戶端或者等待服務(wù)器執(zhí)行的結(jié)果,或者并行執(zhí)行另外的任務(wù),在后面需要時(shí)在查找結(jié)果。這種結(jié)構(gòu)又是一種對(duì)某些公共資源同步管理的簡(jiǎn)單方式。如圖3

4 QNX Neutrino內(nèi)核對(duì)于線程功能的擴(kuò)展 具有Neutrino內(nèi)核的QNX6操作系統(tǒng)對(duì)線程的功能進(jìn)行了擴(kuò)展,提供了一些POSIX標(biāo)準(zhǔn)沒(méi)有提供的功能。 1)POSIX標(biāo)準(zhǔn)規(guī)定使用互斥體的線程必須在同一進(jìn)程內(nèi),作為擴(kuò)展QNX支持在不同進(jìn)程中的線程使用互斥體。如果在兩個(gè)進(jìn)程間創(chuàng)建一塊共享內(nèi)存,并在內(nèi)存中初始化一個(gè)互斥體,那么兩個(gè)進(jìn)程之間的線程可以用這個(gè)互斥體來(lái)進(jìn)行同步操作,這是POSIX做不到的。 2) QNX操作系統(tǒng)還提出了一種獨(dú)特的“線程池”概念。當(dāng)程序需要很多線程同時(shí)工作時(shí),利用“線程池”可以將線程的個(gè)數(shù)限定在一定的范圍內(nèi)。“高水位”、“低水位”的概念分別對(duì)應(yīng)著程序中的最大線程數(shù)和最小線程數(shù)。當(dāng)程序中線程數(shù)目小于“低水位”時(shí),“線程池”會(huì)自動(dòng)創(chuàng)建新的線程進(jìn)行工作,當(dāng)線程數(shù)目大于“高水位”時(shí),“線程池”會(huì)“清除”多于的線程,以防止溢出。這樣程序?qū)⑹冀K保持著一定數(shù)量的線程在工作,“線程池”特別適用客戶端/服務(wù)器結(jié)構(gòu),可以很好地保護(hù)服務(wù)器的資源。QNX提供了專門(mén)的程序庫(kù)來(lái)管理“線程池”頭文件是,相應(yīng)的API主要有:thread_pool_create(),用于建立一個(gè)線程池,thread_pool_destroy()程序運(yùn)行結(jié)束后用它來(lái)清除線程池,thread_pool_start()用來(lái)啟動(dòng)一個(gè)線程池。 5 QNX系統(tǒng)下實(shí)用編譯方法 筆者編制了QNX環(huán)境下的通用Makefile,用于編譯多線程程序,當(dāng)然也適用于單線程程序的編譯,而這個(gè)Makefile稍加改動(dòng)便可以用于 LINUX/UNIX系統(tǒng)中,筆者在RedHat Linux7下試驗(yàn)通過(guò)。用法,首先將此Makefile 和所要編譯的c/c++程序(支持多個(gè)c/c++程序)/頭文件放置于一個(gè)目錄中,在終端上鍵入make,此Makefile將自動(dòng)把所有相關(guān)源代碼連接編譯成名為go的可執(zhí)行文件,要運(yùn)行編譯好的程序,只需在終端上鍵入./go便可。在終端上鍵入make clean將把所有的編譯產(chǎn)生的臨時(shí)文件刪除,只留下原始文件和make文件,在終端上鍵入make depend將檢查文件的依賴性,源代碼如下: EXECUTABLE=go LINKCC=$(CC) #如果用于LINUX/UNIX系統(tǒng),要求安裝可移植線程庫(kù),并裝入下列函數(shù)庫(kù) #LIBS=-lm –lpthread -lsocket #如果用于QNX系統(tǒng)裝入下面的函數(shù)庫(kù) LIBS=-lm –lsocket #如果編譯c++程序?qū)⑾旅鎔cc改為g++ CC=gcc CFLAGS=-Wall -g CXX=g++ CXXFLAGS=$(CFLAGS) SRCS:=$(wildcard *.c) $(wildcard *.cc) $(wildcard *.C) OBJS:=$(patsubst %.c,%.o,$(wildcard *.c)) $(patsubst %.cc,%.o,$(wildcard *.cc)) $(patsubst %.C,%.o,$(wildcard *.C)) DEPS:=$(patsubst %.o,%.d,$(OBJS)) all:$(EXECUTABLE) $(EXECUTABLE):$(DEPS) $(OBJS) $(LINKCC) $(LDFLAGS) -o $(EXECUTABLE) $(OBJS) $(LIBS) %.d:%.c $(CC) -M $(CPPFLAGS) $< >$@ $(CC) -M $(CPPFLAGS) $< |sed s/\.o/.d/>$@ %.d:%.cc $(CXX) -M $(CPPFLAGS) $< >$@ $(CXX) -M $(CPPFLAGS) $< |sed s/\.o/.d/>$@ %.d:%.C $(CXX) -M $(CPPFLAGS) $< >$@ $(CXX) -M $(CPPFLAGS) $< |sed s/\.o/.d/>$@ clean: -rm $(OBJS) $(EXECUTABLE) $(DEPS) # -rm ./*.* 如果有一些臨時(shí)的記錄文件無(wú)法自動(dòng)去掉加在這里 depend: $(DEPS) @echo "Dependencies are now up-to-date." 6 總結(jié) QNX實(shí)時(shí)操作系統(tǒng)的實(shí)時(shí)性很好,上下文切換時(shí)間、中斷延時(shí)都非常微小,本身提供了對(duì)于多線程技術(shù)的強(qiáng)大支持,如果在QNX下使用多線程編程技術(shù)來(lái)解決大型并發(fā)多任務(wù)系統(tǒng)的控制調(diào)度,其優(yōu)勢(shì)是很大的,前景也是很廣闊的。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車(chē)的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車(chē)技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車(chē)工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車(chē)。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車(chē) 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉