日韩欧乱色一区二区三区在线_久久―日本道色综合久久_欧美日本一区二区_网曝91综合精品门事件在线

千鋒教育-做有情懷、有良心、有品質的職業教育機構

手機站
千鋒教育

千鋒學習站 | 隨時隨地免費學

千鋒教育

掃一掃進入千鋒手機站

領取全套視頻
千鋒教育

關注千鋒學習站小程序
隨時隨地免費學習課程

當前位置:首頁  >  技術干貨  > 為什么聲明性語言往往適合于并行執行,命令代碼很難在多個內核和多個機器之間并行化?

為什么聲明性語言往往適合于并行執行,命令代碼很難在多個內核和多個機器之間并行化?

來源:千鋒教育
發布人:xqq
時間: 2023-10-13 14:34:17 1697178857

一、為什么聲明性語言往往適合于并行執行

函數式編程里的程序在輸入相同時總是得到相同的輸出,不包含其他狀態,也不影響其他程序的狀態,所以在哪里執行都一樣,這樣就很容易調度到其他線程、進程甚至遠程服務器上。而命令式代碼通常隱含地使用全局狀態,這些狀態在不同代碼之間是共享的,代碼的執行時序會影響執行結果,這就導致難以并行化。

但這并非沒有代價。純粹的函數式編程無法處理帶有狀態的外部組件,而磁盤讀寫、網絡輸入輸出等IO操作天生是有狀態的,如果不能處理這些對象,語言的適用范圍是很窄的。所以函數式編程語言通常也會要么帶有命令式的支持,要么將處理有狀態的對象的過程封裝到某些外部的統一模型當中(比如Erlang的消息機制)

聲明性范式只要求程序員提供程序的目的,然后系統自己有編譯器,lib或優化器去計算出”怎么達到目的”較好的執行路徑,而不用程序員提供怎么達到目的方法或者hint。而命令式范式需要程序員手把手的告訴機器怎么完成任務。機器無法區分目的和手段,而必須嚴格按照程序指定的來執行。

相比之下,就是根據“優化器”計算出來的執行路徑好,還是人指定的好呢?(把“好”定義為價值除以產生價值需要的時間)

舉個例子: 對SQL來說,你只需要指定你想找什么。數據庫會自己算出來怎么按照你的要求找。 你如果用java或C在一大塊硬盤上找數據,你就要自己去指定機器每一步怎么運行才能給你結果。

延伸閱讀:

二、聲明式與命令式

命令式(Imperative)和聲明式(Declarative)是很早就有的概念,比如 SQL、HTML、CSS 是典型的聲明式語言,而我們使用的絕大部分編程語言都是命令式的。

命令式編程就像它的名字一樣,它由開發者我們一步一步的告述計算機,執行一系列的操作,然后得到想要的結果,起主要作用的是開發者,計算機只是幫助開發者執行計算而已。

而聲明式編程卻與此相反,它不是告述計算機做什么做,而是直接告述計算它想要的結果,至于怎么做,由預先寫好的程序依據一定的算法由計算機自動推算出來。

聲明式與命令式的主要區別在于,聲明式描述的是結果,它不關心過程。比如 SQL,我們告述數據庫的是,我們要查詢某張表滿足某某條件的數據,但我們并不會告述數據庫怎么去查,怎么查數據是數據庫系統自己關心的事情。

聲明:本站稿件版權均屬千鋒教育所有,未經許可不得擅自轉載。
10年以上業內強師集結,手把手帶你蛻變精英
請您保持通訊暢通,專屬學習老師24小時內將與您1V1溝通
免費領取
今日已有369人領取成功
劉同學 138****2860 剛剛成功領取
王同學 131****2015 剛剛成功領取
張同學 133****4652 剛剛成功領取
李同學 135****8607 剛剛成功領取
楊同學 132****5667 剛剛成功領取
岳同學 134****6652 剛剛成功領取
梁同學 157****2950 剛剛成功領取
劉同學 189****1015 剛剛成功領取
張同學 155****4678 剛剛成功領取
鄒同學 139****2907 剛剛成功領取
董同學 138****2867 剛剛成功領取
周同學 136****3602 剛剛成功領取
相關推薦HOT
主站蜘蛛池模板: 共和县| 博白县| 汉源县| 庆阳市| 霍林郭勒市| 禹州市| 兴国县| 卢龙县| 祁门县| 定日县| 靖州| 武定县| 驻马店市| 麦盖提县| 崇阳县| 镇坪县| 大洼县| 崇明县| 抚宁县| 内乡县| 镇平县| 莎车县| 东方市| 成安县| 多伦县| 安义县| 太康县| 曲靖市| 磐安县| 茶陵县| 新龙县| 潼关县| 韩城市| 济南市| 广平县| 五大连池市| 嘉善县| 荔浦县| 彰化市| 新巴尔虎左旗| 昌黎县|