forked from youngyangyang04/TechCPP
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request youngyangyang04#40 from alu234/master
update: 6 articles
- Loading branch information
Showing
7 changed files
with
51 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
尽管进程提供了资源隔离和独立的执行环境,但它们的创建和管理相对较重,不适用于需要频繁交互或共享状态的场景。线程作为轻量级的进程,提供了更快的上下文切换和高效的资源共享,使得在同一进程内可以有多个并发执行流。然而,线程的调度仍然受操作系统控制,可能涉及到**用户态和内核态的切换开销**。 | ||
|
||
协程进一步降低了并发编程的复杂度和开销,**因为它完全是在用户态下使用的**,尤其在 I/O 密集型任务和微服务架构中表现出色,它们提供了更细粒度的操作和更高效的CPU利用率。由于这些优势,现代编程语言和框架越来越多地采用协程来处理并行和异步任务。 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
PCB 它是操作系统中用于存储关于进程信息的一个重要数据结构。**PCB 是操作系统用来管理和跟踪进程状态的一种方式,确保进程能够有序地执行和切换。** | ||
|
||
通常包含以下信息: | ||
|
||
1. **进程标识符**(PID):一个唯一的标识号,用于区分不同的进程。 | ||
2. **进程状态**:如就绪、运行、等待、终止)等。 | ||
3. **程序计数器**:指向进程下一个要执行的指令地址。 | ||
4. **CPU 寄存器信息**:保存进程被中断或切换时,CPU 寄存器中的数据,以便恢复时可以继续执行。 | ||
5. **CPU 调度信息**:包括进程优先级、调度队列指针和其他调度参数。 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
- **目标**:分页的设计目的主要是为了简化内存管理和消除外部碎片;而分段则旨在反映程序的逻辑结构,使之与物理内存分配相匹配。 | ||
- **灵活性**:分段提供了更多的灵活性,允许程序自然地划分为意义不同的部分;分页则主要关注于内存的有效利用。 | ||
- **易用性**:分页对于程序员来说是透明的,更易于使用;分段则要求程序员有更多的内存管理责任。 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
1. **共享内存**:线程可以直接访问进程的内存空间。共享数据的访问通常需要同步机制来防止出现竞态条件。 | ||
2. **互斥锁**:用于控制对共享资源的访问,保证在同一时间只有一个线程访问共享资源。 | ||
3. **读写锁**:允许多个线程同时读取一个资源,但写入时需要独占访问。 | ||
4. **条件变量**:允许一个或多个线程在某个条件发生前处于睡眠状态,等待另一个线程在该条件上发出通知或广播。 | ||
5. **信号量**:可以用于限制对共享资源的访问,也用于线程间的同步。 | ||
6. **事件(event)**:允许一个线程通知一个或多个等待的线程某个事件已发生。 | ||
7. **屏障(barrier)**:允许多个线程等待直到所有线程都已经达到某个同步点,然后再一起继续执行。 | ||
8. **线程局部存储(TLS)**:为每个线程提供独立的变量副本,避免了同步问题,但不适用于线程间的数据共享。 | ||
9. **原子操作**:利用CPU提供的原子指令集来进行无需加锁的线程安全操作。 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
**进程有独立的堆区和栈区,线程共享进程的堆区但拥有独立的栈区,而协程通常共享堆区**,并且拥有自己的、通常是程序运行时分配的栈区。协程的栈区通常有别于传统的操作系统提供的线程栈,更加灵活和高效。 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
常见: | ||
|
||
1. **管道 (Pipe)**: | ||
- 无名管道(匿名管道):主要用于有亲缘关系的进程之间的通信(例如,父子进程)。数据是单向流动的。 | ||
- 命名管道(FIFO):允许无亲缘关系的进程之间通信,它在文件系统中有一个名字。 | ||
2. **信号 (Signal)**:一种用于通知接收进程某个事件已经发生的简单机制。 | ||
3. **消息队列 (Message Queue)**:允许一个或多个进程向另一个进程发送格式化的数据块。数据块在消息队列中按照一定的顺序排列。 | ||
4. **共享内存 (Shared Memory)**:让多个进程共享一个给定的存储区,是最快的IPC方式,因为数据不需要在进程间复制。 | ||
5. **信号量 (Semaphore)**:主要用于同步进程间的操作,而不是传递数据,但通过控制资源的访问,它可以作为通信的一种手段。 | ||
6. **套接字 (Socket)**:提供网络通信的机制,可用于不同机器上的进程间通信,也可以在同一台机器上的进程之间进行通信。 | ||
|
||
拓展: | ||
|
||
1. **文件系统**:进程可以通过读写文件来交换信息,虽然这不是最高效的IPC方式,但它的使用非常简单且不受平台限制。 | ||
2. **共享文件和映射内存 (Memory-mapped file)**:通过将磁盘上的文件映射到进程的地址空间,多个进程可以访问文件内容,就好像它们在操作共享内存一样。 | ||
3. **远程过程调用 (RPC)**:允许一个程序调用另一台计算机上的程序,就像调用本地程序一样。 | ||
4. **消息传递接口 (MPI)**:常用于高性能计算中,提供了一组标准化的通信协议,用于不同进程(可能在不同的物理机器上)的通信。 | ||
5. **本地过程调用 (LPC)**:在同一台计算机上运行的进程间的通信机制,通常比远程过程调用(RPC)更快。 | ||
6. **Domain Sockets**:类似于网络套接字,但仅限于同一台计算机上的进程间通信,不通过网络层传输数据。 | ||
|