2010-11-11 53 views
12

它們都是同一件事嗎?看幾何中的並行或並行意味着什麼,我會定義爲:並行編程與並行編程相同嗎?

在幾何學中,如果兩條或多條線相交於單點,則稱它們是併發的。

兩條線在一個平面上不 相交或相遇被稱爲並行 線。

再次,在編程中,它們有相同的含義嗎?如果是...爲什麼?

由於

+0

+1優秀的問題。在http://programmers.stackexchange.com/上可能更好嗎? '程序員 - Stack Exchange適用於對軟件開發的主觀討論感興趣的專家程序員。' – 2010-11-11 02:59:17

+0

@JohnK我不認爲這些定義是主觀的。 – 2012-01-07 18:44:50

回答

6

我同意幾何詞彙表存在衝突。想想火車軌道:兩列平行軌道的列車可以獨立運行,同時很少或不需要互動。這些列車並行運行。

基本的使用困難是「併發」可以意味着「同時」(與火車或代碼)或「在同一地點」(與幾何線)。對於許多實際目的(火車,線程資源),這兩個概念直接衝突。

自然語言是假設是愚蠢的,模棱兩可和混亂。但我們是程序員。我們可以在我們的正式編程語言的清晰,簡單和優雅中避難。像Perl一樣。

+2

+1因爲經過深思熟慮,但最後一句肯定是開玩笑吧? – 2010-11-11 03:08:02

3

維基百科:

並行計算是 計算的一種形式,其中程序是 設計爲交互 計算過程,可能是 並行執行的集合。

基本上,如果程序由較小的交互過程組成,程序可以編寫爲併發程序。並行編程實際上是在同時進行這些過程。

所以我認爲併發編程是一種真正的風格,它可以自己並行執行進程來提高性能。

2

不,絕對併發不同於並行。這正是如何。

併發是指在同一時間框架內共享資源。例如,多個進程可能共享相同的CPU或共享內存或I/O設備。

現在,根據定義,如果只有第二個進程在第一個終止之前(在同一個CPU上)開始執行,那麼兩個進程是併發的。如果兩個進程同時運行 - 比如現在說 - 單核CPU,進程是並行的,但不是並行的:在這種情況下,並行只是虛擬的,指的是OS在執行分時操作。操作系統似乎正在同時執行多個進程。如果只有一個單核CPU,則在任何特定時間只能執行一個進程的一條指令。由於人類時間尺度比現代計算機慢數十億倍,因此操作系統可以在進程之間快速切換,以便同時執行多個進程的外觀。

如果您改爲在兩個不同的CPU上運行這兩個進程,則這些進程是並行的:在同一時間幀內沒有共享,因爲每個進程都在它自己的CPU上運行。在這種情況下的並行性不是虛擬的,而是物理的。這裏值得注意的是,在同一個多核CPU的不同內核上運行仍然不能被歸類爲完全並行,因爲這些進程將共享相同的CPU緩存,甚至會爭用它們。