<commit_before>---
layout: post
title: "Parallel Programming Introduction"
date: 2016-09-03 19:55
tags: ParallelProgramming
categories: ParallelProgramming
thumbnail:  book
description: Some basic info about parallel programming
---

## Concurrency Computing, Parallel Computing, Distributed Computing

本来之前看过这类的文章，记得自己是懂了，但是今天偷听到有同学说之前写过多线程编程就是并行编程，又不由得想起来这个问题，这个确实是很容易混淆的两个概念，既然这个课是`Parallel Programming`，就先记录一下**并发（Concurrency）**和**并行（Parallel）**的联系和区别吧。

并行：多个核心分别同时处理一个或者多个任务。

并发：不同的任务看起来“同时”进行，实际上并不一定是同时的，可能是并行的，也就是不同的核心同时来进行这些不同的任务，也可能不是，只是单纯地相互穿插着进行，让人看起来这些任务是“同时”的。所以，个人理解，并发包括并行，但是并发并不一定并行。

个人观点，在多核多任务的状态下，如果单个时间点上面只有一个任务在进行，其他任务被挂起，则是并发不是并行；如果单个时间点上所有的任务都在进行，那么就是并行。在单核状态下，多任务是并发，而不存在并行。

所以，多线程也不一定是并行的。

还有一个分布式计算，这个是对于程序来说的，是这个程序需要和其他的程序一起来解决一个问题。

下面是老师的原话：

- Concurrent computing – a program is one in which multiple tasks can be in progress at any instant.

- Parallel computing – a program is one in which multiple tasks cooperate closely to solve a problem.

- Distributed computing – a program may need to cooperate with other programs to solve a problem.

## Type of parallel systems
<commit_msg>Revert "parallel"<commit_after>---
layout: post
title: "Parallel Programming Introduction"
date: 2016-09-03 19:55
tags: ParallelProgramming
categories: ParallelProgramming
thumbnail:  book
description: Some basic info about parallel programming
---

## Concurrency Computing, Parallel Computing, Distributed Computing

本来之前看过这类的文章，记得自己是懂了，但是今天偷听到有同学说之前写过多线程编程就是并行编程，又不由得想起来这个问题，这个确实是很容易混淆的两个概念，既然这个课是`Parallel Programming`，就先记录一下**并发（Concurrency）**和**并行（Parallel）**的联系和区别吧。

并行：多个核心分别同时处理一个或者多个任务。

并发：不同的任务看起来“同时”进行，实际上并不一定是同时的，可能是并行的，也就是不同的核心同时来进行这些不同的任务，也可能不是，只是单纯地相互穿插着进行，让人看起来这些任务是“同时”的。所以，并发包括并行，但是并发并不一定并行。

个人观点，在多核多任务的状态下，如果单个时间点上面只有一个任务在进行，其他任务被挂起，则是并发不是并行；如果单个时间点上所有的任务都在进行，那么就是并行。在单核状态下，多任务是并发，而不存在并行。

所以，多线程也不一定是并行的。

还有一个分布式计算，这个是对于程序来说的，是这个程序需要和其他的程序一起来解决一个问题。

下面是老师的原话：

- Concurrent computing – a program is one in which multiple tasks can be in progress at any instant.

- Parallel computing – a program is one in which multiple tasks cooperate closely to solve a problem.

- Distributed computing – a program may need to cooperate with other programs to solve a problem.


## Type of parallel systems

{'fraction_non_alphanumeric': 0.08155080213903744, 'fraction_numerical': 0.0106951871657754, 'mean_word_length': 7.873517786561265, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5927118', 'n_tokens_mistral': 1222, 'n_tokens_neox': 1276, 'n_words': 185}