順序計算的程式 單核 如何做到對大量並行事件的模擬

時間 2021-09-10 01:20:11

1樓:駿馬金龍

計算機裡的方案是:用乙個具有超級特權的具有排程功能的排程器來負責CPU資源使用權的分配。

假如有10000個任務,排程器會讓它們排隊,並按一定規則,將CPU分配給第乙個任務一小段時間(很短的乙個時間片段),然後排程器讓第乙個任務休息再次接著排隊,並將CPU又分配給第二個任務一小段時間。依次類推,已經完成的任務不再入隊,新來的任務跟著排隊。(具體任務如何排隊,以及每次將CPU分配給哪個任務,都是優秀的演算法決定的,這裡只是為了易於理解而簡化描述)

CPU執行速度非常快,分配的每乙個時間段都能讓CPU執行很多指令(儘管我們人的感知範圍內是非常短的時間段,比如每個時間段都是5ms長度),你可以將指令看成是任務的最小步驟單位。

就是這樣不斷並快速地切換任務,使得我們人誤以為,所有的任務都在同時執行。但實際上,某一時刻,只有乙個任務在執行。

實際上,這種方式,在計算機領域裡叫做「併發」,而不是你說的「並行」

併發:多個任務同時進行並行:多個任務同時進行

傻眼了?此同時非彼同時。這兩個同時,即便是學計算機的人也一樣很多人不理解。

但舉個例子,肯定能理解。

比如,你要擇菜,折兩根長豆角,你有兩種方式來表達這個同時

(1).折一次豆角1,換著折一下豆角2,再換著折一下豆角1,再換著折一下豆角2,直到折完兩根豆角。這是併發概念裡的同時,表達的是,在外人眼中來看,你在同時折兩根豆角(或兩個任務),儘管,在某一具體時刻,只折其中一根豆角

(2).將兩根豆角併排拿好,一次折兩根豆角。這個是並行概念裡的同時,同一時刻執行多個任務,也是真正意義上的同時。

如果只有單核,那麼只能併發,如果要並行,必須具備多核。

如果將併發的概念放在你想象的場景中,將有乙個上帝之手,讓人1移動一會,再讓人2移動一會,再讓人3移動一會,具體讓誰移動以及移動多長時間,由上帝之手的演算法來計算。

2樓:CYH

這是應該乙個建模的問題,就是模型和實際肯定是有出入的。要更真實的模擬肯定需要更精細的建模。

至於因果混亂,和單執行緒多執行緒沒關係。

比如下面這段程式,不考慮rand部分的話,單執行緒和多執行緒(每個人乙個執行緒或者每幾個人乙個執行緒)結果是相同的

至於和實際情況的出入,確實每個人動不是同步的,這還是建模問題

#每段時間更新n個人的位置

#n個人的位置

pos = [[x0,y0], [x1,y1], ..., [xn, yn]]

new_pos= [[x0,y0], [x1,y1], ..., [xn, yn]] # 複製乙份

更新位置

for i in range(n):

new_pos[i] = pos[i][0] + rand(), pos[i][1] + rand()

# 計算感染使用舊的pos

Chrome的擴充套件程式如何做到在使用者不知情的情況下自動安裝,是否合乎規則?

根據我的使用經驗,取得了 uac 授權的程式可以強行向 Chrome 裡面塞擴充套件,之前華為網盤 迅雷 工行客戶端都這麼幹過 當然這幾個都會提示你,不是偷偷就裝上了 支付寶安全控制項是乙個徹頭徹尾的流氓木馬程式,幹過的事情遠比這個出格 網上流傳的所謂 支付寶偷偷新增根證書,將造成安全隱患 的說法是...

很瘦但胸大是種怎樣的體驗?是如何做到的?

寒小夢 買內衣真的是超級難買 型號大的都特別醜。平衡感不好。低頭看不到腳尖。每次洗澡都被圍觀。別人誇你永遠都是圍繞你的身材,根本看不到你的臉 這個基本都是天上的吧,以目前的全民生活水平已經基本可以排出營養不良導致的女性胸部發育不良了。不知道我這樣算不算瘦!166,52公斤。最近回國後又在瘦了一圈,但...

內向不善交際的人如何做到對人最起碼的熱情和禮貌?

Gemini 其實內向不可怕自卑才可怕內向的人也可以活潑開朗只不過需要時間 靜養療傷 與其糾結怎麼變活潑開朗不如沉澱為乙個自信有魅力的人你若盛開花香自來 Matt 一,內向和外向的人只是恢復能量的方式不同,前者通過在自己的世界裡獨處來恢復能量,後者則是通過與他人互動 社交,旅遊等 前者與自己世界之外...