Ch5 并发计算 Flashcards

Ch5 并发计算

1
Q

什么是 并发计算

A

并发计算是一种计算形式,其中多个计算在重叠的时间段内(并发地)执行,而不是顺序执行。它涉及多个进程或线程协同工作以更快地完成任务。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

并发的三种形式是什么?

A
  1. 分布式系统:多个机器通过网络协同工作。
  2. 多进程系统:同一台机器上运行多个进程。
  3. 多线程系统:单个进程内的多个线程共享相同的内存空间。
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

什么是 分布式系统

A

分布式系统是一个在多个物理机器上执行的程序,通常位于不同的位置,通过网络进行通信(例如内网或互联网)。它用于提高速度、必要性和便利性。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

什么是 多进程系统

A

多进程系统涉及在同一台机器上同时运行的多个进程(可执行文件),每个进程都有自己的控制流和虚拟内存。进程通过 进程间通信 (IPC) 进行通信。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

什么是 多线程系统

A

多线程系统是单个进程内的多个线程共享相同的内存和资源。线程轮流使用 CPU,需要同步以避免竞争条件和死锁。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

并发系统中的主要问题有哪些?

A
  1. 共享资源:多个进程/线程访问同一资源(例如文件、变量)。
  2. 死锁:多个进程/线程被阻塞,等待对方释放资源。
  3. 竞争条件:程序的正确性取决于执行顺序,可能导致不可预测的结果。
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

什么是 互斥锁 (mutex)

A

互斥锁(互斥对象)是一种程序对象,允许多个线程轮流共享资源。只有锁定互斥锁的线程才能解锁它。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

什么是 信号量 (semaphore)

A

信号量是一种用于控制多个进程或线程访问共享资源的变量。它是互斥锁的泛化,可以通知其他线程资源可用。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

什么是 进程管理

A

进程管理涉及为进程分配资源,使它们能够共享和交换信息,保护资源,并实现进程间的同步。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

前台后台 进程的区别是什么?

A
  • 前台:进程在终端中运行,进程完成前无法使用 shell。
  • 后台:进程独立运行,允许你继续使用 shell(使用 & 在后台运行)。
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

C 语言中 fork() 函数的用途是什么?

A

fork() 函数创建一个新进程(子进程),该进程是当前进程(父进程)的副本。子进程从 fork() 调用的位置开始执行。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

exec() 函数族的用途是什么?

A

exec() 函数用新程序替换当前进程的代码。新程序在同一进程中运行,具有相同的 PID。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

wait() 函数的用途是什么?

A

wait() 函数暂停父进程的执行,直到其某个子进程终止。它返回终止子进程的 PID。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

system() 函数的用途是什么?

A

system() 函数允许程序执行一个 shell 命令,就像在终端中输入一样。进程会阻塞,直到命令完成。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

什么是 进程间通信 (IPC)

A

IPC 是进程之间发送和接收信息的过程。它可以在同一台机器上或通过网络在不同机器之间进行。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

IPC 中的 信号 是什么?

A

信号是一个值(整数),从一个进程发送到另一个进程以通知某个事件(例如终止、错误)。它是一种简单的通信形式。

17
Q

IPC 中的 套接字 是什么?

A

套接字是进程之间发送或接收数据的端点。它可以用于同一台机器上的通信或通过网络进行通信。

18
Q

套接字的三种类型是什么?

A
  1. 流套接字:基于连接的(例如 TCP)。
  2. 数据报套接字:无连接的(例如 UDP)。
  3. 原始套接字:绕过传输层。
19
Q

什么是 客户端/服务器模型

A

在客户端/服务器模型中,一个进程(服务器)接收来自多个客户端的请求并执行相应的任务。它常用于网络通信。

20
Q

TCPUDP 的区别是什么?

A
  • TCP:基于连接,可靠,确保数据按顺序传递。
  • UDP:无连接,更快,但数据可能会丢失、损坏或乱序到达。
21
Q

什么是 线程

A

线程是由操作系统独立管理的一系列程序指令。同一进程内的线程共享内存和资源。

22
Q

pthread_create() 函数的用途是什么?

A

pthread_create() 函数在进程中创建一个新线程。它接受一个函数指针作为参数,该函数是线程的起点。

23
Q

什么是 竞争条件

A

竞争条件发生在程序的正确性取决于线程或进程的执行顺序时。它可能导致不可预测的结果。

24
Q

如何防止竞争条件?

A

可以使用同步机制(如 互斥锁信号量)来确保一次只有一个线程访问共享资源。

25
Q

C 语言中 volatile 关键字的用途是什么?

A

volatile 关键字表示变量的值可能会意外更改(例如由另一个线程更改)。它防止编译器优化对该变量的访问。

26
Q

sem_wait()sem_post() 函数的用途是什么?

A
  • sem_wait():减少信号量,如果信号量为 0 则阻塞。
  • sem_post():增加信号量,允许其他线程访问资源。
27
Q

C 语言中 传值传引用 的区别是什么?

A
  • 传值:传递值的副本,函数内的修改不会影响原始变量。
  • 传引用:传递变量的地址,允许函数修改原始变量。
28
Q

套接字编程中 select() 函数的用途是什么?

A

select() 函数监视多个文件描述符(例如套接字),以查看它们是否准备好进行读取、写入或有异常情况。它用于 UDP 服务器以处理多个客户端。

29
Q

recvfrom()sendto() 函数的用途是什么?

A
  • recvfrom():从 UDP 套接字接收数据。
  • sendto():向 UDP 套接字发送数据。
30
Q

pthread_join() 函数的用途是什么?

A

pthread_join() 函数阻塞调用线程,直到指定的线程终止。它允许主线程等待其他线程完成。