Skip to content

Commit 06d0d42

Browse files
committed
more for multi-processing
1 parent a8a6add commit 06d0d42

File tree

2 files changed

+26
-2
lines changed

2 files changed

+26
-2
lines changed

docs/parallel/multi-processing.md

+21-2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,25 @@
77

88
经典的使用多进程的程序有 nginx、PostgreSQL 等,其中 nginx 使用多进程的主要目的是负载均衡,不同的客户端连接将会分配到不同工作进程进行处理,一个工作进程会处理多个连接,而 PostgreSQL 则是为每一个客户端连接都开启新的进程,一个进程只处理一个连接。
99

10-
## 共享内存
10+
在多线程编程中,由于线程之间共享资源,所以我们将注意力放到了如何避免共享资源出错,也就是避免竞态条件上。而在多进程编程里,我们首先需要解决如何让多个进程进行通信的问题。
1111

12-
## IPC
12+
## System V IPC
13+
14+
大多数操作系统,例如 Linux、Solaris 等都实现了 System V 中引入的 IPC API。
15+
16+
这套经典的 API 包含以下组成部分。其中前三种是支持最广泛的。
17+
18+
* 信号量(Semaphore)
19+
* 消息队列(Message queue)
20+
* 共享内存(Shared memory)
21+
* 管道(Pipe)
22+
23+
### 信号量
24+
25+
和我们在多线程编程中介绍的 POSIX 信号量不同,System V 信号量更加复杂。
26+
27+
### 消息队列
28+
29+
### 共享内存
30+
31+
### 管道

docs/parallel/multi-threading.md

+5
Original file line numberDiff line numberDiff line change
@@ -354,6 +354,11 @@ terminate called without an active exception
354354
???+info
355355
容易发现,如果我们创建一个初始值为 1 的信号量,那么它在功能上就等同于一个互斥量了。进行 P 操作相当于上锁,进行 V 操作相当于解锁。
356356

357+
???-info "P 操作和 V 操作名字的由来"
358+
信号量的概念其实是由荷兰计算机家 Dijkstra 提出的,他在论文里用荷兰语 Passering 和 Vrijgave 两个单词来分别形容上述的两个操作。
359+
360+
Dijkstra 为计算机并行编程做出了卓越贡献,我们很快就会在后文看到他提出的关于并发的一个经典的问题。
361+
357362
在 Linux 中,信号量主要有两种实现:System V Semaphore 和 POSIX Semaphore。其中后者较为常用,因此接下来简单介绍后者。
358363

359364
POSIX Semaphore 相关的 API 位于头文件 `semaphore.h` 中,P 操作对应 `sem_wait` 函数,V 操作对应 `sem_post` 函数。

0 commit comments

Comments
 (0)