Skip to content

Commit

Permalink
Merge pull request youngyangyang04#40 from alu234/master
Browse files Browse the repository at this point in the history
update: 6 articles
  • Loading branch information
youngyangyang04 authored Jan 21, 2024
2 parents 3b09631 + 762faab commit c371111
Show file tree
Hide file tree
Showing 7 changed files with 51 additions and 0 deletions.
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,12 @@
* [协程是什么,为什么需要协程](./problems/协程是什么,为什么需要协程.md)
* [进程的状态转换有那些?](./problems/进程的状态转换有那些?.md)
* [什么是进程?什么是线程?他们的区别是什么?](./problems/什么是进程?什么是线程?他们的区别是什么?.md)
* [进程间的通信方式有那些?](./problems/进程间的通信方式有那些?.md)
* [线程间的通信方式有那些?](./problems/线程间的通信方式有那些?.md)
* [线程,进程和协程是否有自己独立的堆区和栈区?](./problems/线程,进程和协程是否有自己独立的堆区和栈区?.md)
* [什么是PCB?](./problems/什么是PCB?.md)
* [分页和分段的区别是什么?](./problems/分页和分段的区别是什么?.md)
* [为什么有了进程还需要线程和协程?](./problems/为什么有了进程还需要线程和协程?.md)

# linux 服务器
* [32位系统一个进程最多有多少堆内存](./problems/32位系统一个进程最多有多少堆内存.md)
Expand Down
3 changes: 3 additions & 0 deletions problems/为什么有了进程还需要线程和协程?.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
尽管进程提供了资源隔离和独立的执行环境,但它们的创建和管理相对较重,不适用于需要频繁交互或共享状态的场景。线程作为轻量级的进程,提供了更快的上下文切换和高效的资源共享,使得在同一进程内可以有多个并发执行流。然而,线程的调度仍然受操作系统控制,可能涉及到**用户态和内核态的切换开销**

协程进一步降低了并发编程的复杂度和开销,**因为它完全是在用户态下使用的**,尤其在 I/O 密集型任务和微服务架构中表现出色,它们提供了更细粒度的操作和更高效的CPU利用率。由于这些优势,现代编程语言和框架越来越多地采用协程来处理并行和异步任务。
9 changes: 9 additions & 0 deletions problems/什么是PCB?.md
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 调度信息**:包括进程优先级、调度队列指针和其他调度参数。
3 changes: 3 additions & 0 deletions problems/分页和分段的区别是什么?.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
- **目标**:分页的设计目的主要是为了简化内存管理和消除外部碎片;而分段则旨在反映程序的逻辑结构,使之与物理内存分配相匹配。
- **灵活性**:分段提供了更多的灵活性,允许程序自然地划分为意义不同的部分;分页则主要关注于内存的有效利用。
- **易用性**:分页对于程序员来说是透明的,更易于使用;分段则要求程序员有更多的内存管理责任。
9 changes: 9 additions & 0 deletions problems/线程间的通信方式有那些?.md
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提供的原子指令集来进行无需加锁的线程安全操作。
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
**进程有独立的堆区和栈区,线程共享进程的堆区但拥有独立的栈区,而协程通常共享堆区**,并且拥有自己的、通常是程序运行时分配的栈区。协程的栈区通常有别于传统的操作系统提供的线程栈,更加灵活和高效。
20 changes: 20 additions & 0 deletions problems/进程间的通信方式有那些?.md
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**:类似于网络套接字,但仅限于同一台计算机上的进程间通信,不通过网络层传输数据。

0 comments on commit c371111

Please sign in to comment.